【发布时间】:2010-11-04 05:28:57
【问题描述】:
C++ 标准在 4.12 节中说,
算术、枚举、指针或指向成员类型的指针的右值可以转换为 bool 类型的右值。零值、空指针值或空成员指针值转换为 false 任何其他值都转换为 true。
也就是说下面的代码是有效的,
if(5)
std::cout << "WOW!";
它在语法上是有效的,但在语义上它没有任何意义。我的问题是为什么 C++ 允许这样奇怪的事情? AFAIK,它没有带来任何优势,而不是制造混乱。
【问题讨论】:
-
这只是拖钓。不是一个真正的问题。
-
海报有着不错的历史 - 是什么让您认为这不是真实的?
-
它对世界各地使用 C(或汇编语言)长大的大量程序员来说具有语义意义。
-
我不认为这是一个巨魔问题。我喜欢它——也经常想知道为什么会这样。