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

c – 插入运算符后,垃圾出现在向量中

发布时间:2020-12-16 10:31:23 所属栏目:百科 来源:网络整理
导读:我有一个对象,其运算符定义如下: P operator +(const P rhs) { return P(x + rhs.x,y + rhs.y,z + rhs.z);} 它没有自定义复制或赋值运算符. 在向量中直接指定添加的结果后,垃圾会出现在其中. P p1(1.0,0.0,0.0);P p2(0.0,0.0);vectorP v(1);v[0] = p1 + p2;
我有一个对象,其运算符定义如下:

P& operator +(const P &rhs) {
    return P(x + rhs.x,y + rhs.y,z + rhs.z);
}

它没有自定义复制或赋值运算符.

在向量中直接指定添加的结果后,垃圾会出现在其中.

P p1(1.0,0.0,0.0);
P p2(0.0,0.0);

vector<P> v(1);
v[0] = p1 + p2; // v[0] now contains garbage.

如果我通过一个变量来做,一切都如预期的那样.

vector<P> u(1);
P q = p1 + p2;
u[0] = q; // u[0] contains correct value.

这种行为的原因是什么?这两种情况有什么区别?

解决方法

您返回对临时的引用.这是一个坏主意,因为临时超出了函数末尾的范围(在这种情况下,是操作符函数).将您的操作符声明为:

P operator +(const P &rhs) const

代替.

(编辑:李大同)

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

    推荐文章
      热点阅读