我正在转向GCC 4.6.1,它开始抱怨代码与GCC 4.4和MSVC10一起工作正常。当从这样的函数返回时,它似乎不想在shared_ptr
和bool
之间进行转换:
class Class { shared_ptr<Somewhere> pointer_; };
bool Class::Function () const
{
return pointer_;
}
使用
return static_cast<bool> (pointer_);
一切正常。到底他妈发生了什么?这是--std=cpp0x
。
答案 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。