如何在c ++中评估if语句?

时间:2009-09-25 19:19:31

标签: c++ if-statement evaluation

{+ 1}}与C ++中的if ( c )相同吗?

8 个答案:

答案 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是否指向有效对象的指令。通常,编译器会生成相同的代码。