【发布时间】:2019-08-16 15:19:33
【问题描述】:
当用作布尔表达式或显式或隐式转换为布尔值时,nullptr 是否始终为假?此实现是否在标准中定义或指定?
我写了一些代码来测试,但不确定它是否完全测试了这个属性。我找不到专门讨论此问题的现有 SO 答案。 cppreference 在我看到的情况下并没有提到这一点。
if (nullptr) {
;
} else {
std::cout << "Evaluates to false implicitly\n";
}
if (!nullptr) {
std::cout << "Evaluates to false if operated on\n";
}
if (!(bool)(nullptr)) {
std::cout << "Evaluates to false if explicitly cast to bool\n";
}
预期和实际:
Evaluates to false implicitly
Evaluates to false if operated on
Evaluates to false if explicitly cast to bool
【问题讨论】:
-
呵呵,没错,cppreference 没说。至少不是直接的。
-
"nullptr 是否始终为假?" - 是的。
-
在这里找到它:en.cppreference.com/w/cpp/language/implicit_conversion 并向下滚动到“§Boolean 转换”。我同意应该在en.cppreference.com/w/cpp/language/nullptr 上提及它
-
@bolov:所以只是建议改变那里,不需要在这里讨论它......
标签: c++ c++11 language-lawyer implicit-conversion nullptr