【发布时间】:2017-01-26 14:22:23
【问题描述】:
我在用g++,写一个简单的函数:
#include <memory>
std::shared_ptr<char> ptr;
bool fails_compiling()
{
return ptr;
}
从我在界面中看到的,shared_ptr 实现包括一个 bool 运算符,我什至可以应用这样的快速修复:
return static_cast<bool>(ptr);
现在可以编译了。
为什么返回算法不会像if() 和while() 那样尝试自动转换为bool?
【问题讨论】:
-
布尔运算符是
explicit。 -
那个布尔运算符是为了向后兼容糟糕的风格。更好地比较与
nullptr的不等式,这需要与转换为 bool 的return ptr != nullptr;相等。 -
@ÖöTiib,在哪个官方文档中说这是“向后兼容”?
-
为什么要把明显的真理写进文档?
ptr很有用,因为ptr != nullptr显然是从 C 继承的。shared_ptr::operator bool是explicit显然是为了将其用法缩小到有限的上下文中。 B. Stroustrup 无数次提到类型安全作为意图。
标签: c++ return return-value smart-pointers boolean-expression