我正在使用g ++并编写一个简单的函数:
#include <memory>
std::shared_ptr<char> ptr;
bool fails_compiling()
{
return ptr;
}
从界面中可以看到,该shared_ptr
实现包括一个bool
运算符,甚至可以应用如下快速修复方法:
return static_cast<bool>(ptr);
现在可以编译了。
为什么返回算法不尝试自动转换来bool
喜欢if()
和while()
做?
如果您签出std::shared_ptr
的bool转换运算符,您将看到它声明为:
explicit operator bool() const;
使用explicit
只是告诉编译器禁止隐式转换,这是因为函数的返回类型与要返回的对象类型不同而发生的。但是,这不会影响上下文转换。
在以下任何情况下发生:
- 控制的表达
if
,while
,for
;- 逻辑运算符
!
,&&
和||
;- 条件运算符
?:
;static_assert
;noexcept
。
以上引用自cppreference
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句