C++标准在第4.12节中说
算术,枚举,指针或指向成员类型的指针的右值可以转换为bool类型的右值.将零值,空指针值或空成员指针值转换为false,将任何其他值转换为true.
这意味着以下代码有效,
if(5)
std::cout << "WOW!";
Run Code Online (Sandbox Code Playgroud)
它在语法上是有效的,但在语义上它没有任何意义.我的问题是为什么C++允许这样奇怪的事情?AFAIK,它没有任何优势而不是混淆.
Joh*_*don 21
我认为这是历史性的,也是C用于评估bool概念的副产品......
C没有使用布尔类型,并且在C的"向下到金属"范例中,设置为NULL的指针和数字类型等也是隐式的false.
如果你认为它是'没有/零== false'和'其他任何东西== true'它确实有意义.
实际上,在许多语言中,包括C/Python/Perl/BASIC非零整数/指针值总是被认为是真的,0被认为是假的.
这是许多编程语言中的已知约定,因此没有理由,为什么这不适用于C++?
问题是为什么在Java中不是这样?