【问题标题】:typedef shared_ptr<T> conversion to booltypedef shared_ptr<T> 转换为 bool
【发布时间】:2019-04-05 16:15:29
【问题描述】:

我有一个类型定义的 shared_ptr,我在条件检查中使用它。

它是这样定义的:

typedef std::shared_ptr<T> typeTPtr;

然后我将它传递给一个采用 bool 参数的函数:

void Foo(bool);

当我尝试这样做时:

typeTPtr ptrT = ...
Foo(ptrT);

我得到一个错误提示

无法将参数从 T 转换为 bool

我相信 std::shared_ptr 明确定义了 bool 运算符。 为什么编译器不将 shared_ptr 转换为 bool? 我正在使用 Visual C++ 2017

谢谢。

【问题讨论】:

  • 我猜这两个答案都是正确的,所以应该接受其中一个!

标签: c++ visual-c++ shared-ptr


【解决方案1】:

它确实有一个操作符bool,但是这个操作符是explicit,所以你应该执行一次强制转换:

foo(static_cast<bool>(ptr));

请注意,if 语句内不需要强制转换,因为它被视为显式转换。

【讨论】:

    【解决方案2】:

    shared_ptroperator bool() 标记为 explicit。所以隐式转换是不可能的。

    使用static_cast 代替显式转换。

    【讨论】:

      猜你喜欢
      • 2012-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多