当函数返回类型为bool时,为什么我不能在C++ 14中返回共享指针?

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()做的?

Whi*_*TiM 6

如果你checkout std::shared_ptr的bool转换运算符,你会看到它被声明为:

explicit operator bool() const;
Run Code Online (Sandbox Code Playgroud)

使用explicit简单地告诉编译器禁止隐式转换,这是因为函数的返回类型与返回的对象类型不同而发生的情况.但是,这不会影响上下文转换.

发生在任何情况下:

  • 控制的表达if,while,for;
  • 逻辑运算符!,&&||;
  • 条件运算符?:;
  • static_assert;
  • noexcept.

以上引用来自cppreference