为什么空字符串文字被视为true?

时间:2014-07-02 12:15:56

标签: c++ string if-statement

为什么此代码中的条件为true

int main ( )
{

   if ("")
      cout << "hello"; // executes!

   return 0;
}

3 个答案:

答案 0 :(得分:31)

如果条件评估为0 * 以外的任何条件,则该条件被视为“真”。 ""是一个包含单个\0字符的const char数组。要将此值作为条件进行评估,编译器会将数组“衰减”为const char*。由于const char[1]不在地址0,因此指针非零并满足条件。


* 更确切地说,如果在隐式转换为true后评估为bool。对于简单类型,这与非零相同,但对于类类型,您必须考虑是否定义了operator bool()及其作用。

来自C ++ 11草案规范的

§4.12:

  

4.12布尔转换[conv.bool]

     

算术,无范围枚举,指针或指向成员类型的指针的prvalue可以是   转换为bool类型的prvalue。零值,空指针值,   或null成员指针值转换为false;任何其他价值   转换为真。可以转换类型为std :: nullptr_t的prvalue   对于bool类型的prvalue;结果值为false。

答案 1 :(得分:3)

因为""衰减到char const*,并且所有非空指针在转换为布尔值时转换为true

答案 2 :(得分:0)

你可能来自像PHP这样的languange,其中检查处理不同:

 php -r 'echo "X";if ("") echo "Y";'

这将打印X,但不打印Y,因为空字符串没有值。

正如其他人所指出的那样,在C ++中它是一个非空指针,所以评估为真。