加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – auto_ptr内容上的三元运算符无法正常工作

发布时间:2020-12-16 10:54:10 所属栏目:百科 来源:网络整理
导读:我将auto_ptr初始化为NULL,稍后在游戏中我需要知道它是否为NULL以返回它或新副本. 我试过这个 auto_ptrRequestContext ret = (mReqContext.get() != 0) ? mReqContext : new RequestContext(); 和其他几个类似的东西铸造等等,但是g试图调用auto_ptrs不存在的
我将auto_ptr初始化为NULL,稍后在游戏中我需要知道它是否为NULL以返回它或新副本.

我试过这个

auto_ptr<RequestContext> ret = (mReqContext.get() != 0) ? mReqContext : new RequestContext();

和其他几个类似的东西铸造等等,但是g试图调用auto_ptrs不存在的运算符? (三元运算符)而不是使用RequestContext *进行三元比较.

即使我施展它也行不通.

任何提示?

编辑等于不平等

解决方法

我想情况类似于以下情况:

#include <iostream>
#include <memory>

int main()
{
    std::auto_ptr<int> a(new int(10));
    std::auto_ptr<int> b = a.get() ? a : new int(10);
}

这是Comeau非常有启发性的错误信息:

"ComeauTest.c",line 7: error: operand types are incompatible ("std::auto_ptr<int>"
          and "int *")
      std::auto_ptr<int> b = a.get() ? a : new int(10);
                                         ^

三元运算符需要两个结果的兼容类型,您不能让它在一个案例中返回用户定义的对象而在另一个案例中返回裸指针. NB! std :: auto_ptr在显式构造函数中获取指针,这意味着三元运算符不能将第二个参数隐式转换为std :: auto_ptr

可能的解决方案:

std::auto_ptr<int> b = a.get() ? a : std::auto_ptr<int>(new int(10));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读