和C++ 中if ( c )
的一样吗?if ( c == 0 )
问问题
41972 次
7 回答
74
不,if (c)
是一样的if (c != 0)
。和if (!c)
是一样的if (c == 0)
。
于 2009-09-25T19:20:42.240 回答
25
我会从这个包中脱颖而出......“ if (c)
”最接近“ if (((bool)c) == true)
”。对于整数类型,这意味着“ if (c != 0)
”。正如其他人指出的那样,重载operator !=
会导致一些奇怪,但重载 " operator bool()
" 除非我弄错了。
于 2009-09-25T19:38:45.850 回答
7
如果 c 是指针或数值,
if( c )
相当于
if( c != 0 )
如果 c 是布尔值(类型 bool [仅限 C++]),(编辑:或具有运算符 bool() 重载的用户定义类型)
if( c )
相当于
if( c == true )
如果 c 既不是指针也不是数值,也不是布尔值,
if( c )
不会编译。
于 2009-09-25T20:35:30.163 回答
3
这更像if ( c != 0 )
当然,!=
运算符可以重载,因此说它们完全相等并不完全准确。
于 2009-09-25T19:20:31.947 回答
0
== 0
是的,如果您更改为 ,它们是相同的!= 0
。
于 2009-09-25T19:20:42.570 回答
0
这仅适用于数值。如果 c 是类,则必须有一个重载的运算符来进行布尔转换,例如这里:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
于 2009-09-25T19:47:31.627 回答
-5
如果c
是指针,那么测试
if ( c )
不完全一样
if ( c != 0 )
后者是c
对0
(空)指针的直接检查,而前者实际上是检查是否c
指向有效对象的指令。但是,通常编译器会生成相同的代码。
于 2009-09-25T20:37:11.417 回答