为什么在函数中返回shared_ptr时不将其隐式转换为布尔值?

以下不会编译:

#include <memory>
class A;
bool f() {
    std::shared_ptr<A> a;
    return a;
}

int main()
{
    f();
    return 0;
}

并失败:

Compilation failed due to following error(s).main.cpp: In function ‘bool f()’:
main.cpp:13:12: error: cannot convert ‘std::shared_ptr’ to ‘bool’ in return
     return a;

标准(我认为)不允许在这里进行隐式转换的原因是什么?

回答

因为用户定义的运算符用于转换std::shared_ptrbool明确的

explicit operator bool() const noexcept;

需要注意的是隐式转换到bool在条件if语句-等等-仍然以偶数发生明确的用户定义的转换操作符bool

std::shared_ptr<int> ptr;

if (ptr) { // <-- implicit conversion to bool

}

也就是说,您不需要static_cast<bool>(ptr)if语句的条件中写入。


以上是为什么在函数中返回shared_ptr时不将其隐式转换为布尔值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>