D M*_*hta 25 c++ string if-statement
为什么这段代码中的条件true
?
int main ( )
{
if ("")
cout << "hello"; // executes!
return 0;
}
Run Code Online (Sandbox Code Playgroud)
dlf*_*dlf 31
如果条件评估为0 *以外的任何条件,则该条件被视为"真" .""
是一个包含单个\0
字符的const char数组.要将此值作为条件进行评估,编译器将"衰减"数组const char*
.由于const char[1]
它不位于地址0,因此指针非零并且满足条件.
*更确切地说,如果它true
在被隐式转换为之后进行评估bool
.对于简单类型,这与非零相同,但对于类类型,您必须考虑是否operator bool()
已定义及其作用.
§4.12来自C++ 11草案规范:
4.12布尔转换[conv.bool]
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型为std :: nullptr_t的prvalue可以转换为bool类型的prvalue; 结果值为false.