Ale*_*lke 7 c++ return smart-pointers return-value boolean-expression
我正在使用g ++并编写一个简单的函数:
#include <memory>
std::shared_ptr<char> ptr;
bool fails_compiling()
{
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
从我在界面中看到的,shared_ptr实现包括一个bool操作符,我甚至可以应用这样的快速修复:
return static_cast<bool>(ptr);
Run Code Online (Sandbox Code Playgroud)
它现在编译.
为什么会回归算法不尝试自动转换到bool喜欢的if()和while()做的?
如果你checkout std::shared_ptr的bool转换运算符,你会看到它被声明为:
explicit operator bool() const;
Run Code Online (Sandbox Code Playgroud)
使用explicit简单地告诉编译器禁止隐式转换,这是因为函数的返回类型与返回的对象类型不同而发生的情况.但是,这不会影响上下文转换.
发生在任何情况下:
- 控制的表达
if,while,for;- 逻辑运算符
!,&&和||;- 条件运算符
?:;static_assert;noexcept.
以上引用来自cppreference