if ( c )
和if ( c == 0 )
在C++中是等价的吗?
if (c)
和 if (c != 0)
是相同的。
而 if (!c)
和 if (c == 0)
是相同的。在这个问题上,我会与众不同... "if (c)
" 最接近的是 "if (((bool)c) == true)
"。对于整数类型,这意味着 "if (c != 0)
"。正如其他人指出的那样,重载 operator !=
可能会导致一些奇怪的问题,但是除非我错了,重载 "operator bool()
" 也可能会导致类似问题。
if(bool cond = c) ...;
来显示隐式转换。 - Johannes Schaub - litbif( c )
等同于
if( c != 0 )
if( c )
等同于
if( c == true )
if( c )
无法编译。
operator bool()
,这样它就可以成功编译了。” - Troubadour这更像是 if ( c != 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");
}
如果你把== 0
改成!= 0
,那么它们就是相同的。
if ( c )
不完全相同
if ( c != 0 )
0
(null)的简单检查,而前者实际上是一条指令,用于检查 c 是否指向有效对象。 通常编译器生成相同的代码。
c
是否指向其类型的有效对象(或函数)。需要注意的是,在所有情况下,0始终是相同的,并且始终具有相同的含义。它只能转换为许多不同的东西。 - Johannes Schaub - litb