GCC错误:无法转换'const shared_ptr< ...>'以'bool'作为回报

时间:2011-09-28 07:59:17

标签: c++ gcc c++11

我正在转向GCC 4.6.1,它开始抱怨代码与GCC 4.4和MSVC10一起工作正常。当从这样的函数返回时,它似乎不想在shared_ptrbool之间进行转换:

class Class { shared_ptr<Somewhere> pointer_; };

bool Class::Function () const
{
    return pointer_;
}

使用

return static_cast<bool> (pointer_);
一切正常。到底他妈发生了什么?这是--std=cpp0x

2 个答案:

答案 0 :(得分:41)

在C ++ 11中,shared_ptr有一个explicit operator bool,这意味着shared_ptr无法隐式转换为bool。< / p>

这是为了防止在算术表达式和类似情况下意外转换shared_ptr的一些潜在缺陷。

添加显式强制转换是对代码的有效修复。

您也可以return pointer_.get() != 0;return pointer_.get();甚至return pointer_ != nullptr;

答案 1 :(得分:3)

shared_ptr有一个explicit bool conversion。它可以在条件表达式中使用,也可以像使用static_cast一样显式转换为bool。