{+ 1}}与C ++中的if ( c )
相同吗?
答案 0 :(得分:51)
不,if (c)
与if (c != 0)
相同。
if (!c)
与if (c == 0)
相同。
答案 1 :(得分:22)
我会在这个方面打破......“if (c)
”最接近“if (((bool)c) == true)
”。对于整数类型,这意味着“if (c != 0)
”。正如其他人所指出的那样,超载operator !=
可能会导致一些陌生感,但除非我弄错,否则会导致“operator bool()
”超载。
答案 2 :(得分:6)
如果c是指针或数值,
if( c )
相当于
if( c != 0 )
如果c是布尔值(类型为bool [only C ++]), (编辑:或具有运算符bool()的重载的用户定义类型)
if( c )
相当于
if( c == true )
如果c既不是指针也不是数值,也不是布尔值,
if( c )
不会编译。
答案 3 :(得分:3)
更像if ( c != 0 )
当然,!=
运算符可能会过载,因此说这些运算符完全相同并不完全准确。
答案 4 :(得分:0)
仅适用于数值。如果c是class,则必须有一个运算符重载,它执行转换布尔值,例如在这里:
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
答案 5 :(得分:-1)
如果您将== 0
更改为!= 0
,则它们是相同的。
答案 6 :(得分:-3)
if(c)
{
//body
}
c的可能值为: negative,zero,正
条件语句将*零*视为false
正面和负面都是true
仅当条件为true
时块才会执行。
答案 7 :(得分:-5)
如果c
是指针,那么测试
if ( c )
与
不完全相同if ( c != 0 )
后者是针对c
(null)指针的0
的直接检查,而前者实际上是检查c
是否指向有效对象的指令。通常,编译器会生成相同的代码。