40

和C++ 中if ( c )的一样吗?if ( c == 0 )

4

7 回答 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 )

后者是c0(空)指针的直接检查,而前者实际上是检查是否c指向有效对象的指令。但是,通常编译器会生成相同的代码。

于 2009-09-25T20:37:11.417 回答