gpt4 book ai didi

c++ - 插入运算符的结果后 vector 中出现垃圾

转载 作者:太空狗 更新时间:2023-10-29 19:44:19 24 4
gpt4 key购买 nike

我有一个对象,其运算符定义如下:

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

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

我在vector内部直接赋值加法结果后,里面出现乱码。

P p1(1.0, 0.0, 0.0);
P p2(0.0, 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.

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

最佳答案

您返回对临时对象的引用。这是个坏主意,因为临时变量在函数末尾超出范围(在本例中为 operator+ 函数)。将您的运营商声明为:

P operator +(const P &rhs) const

相反。

关于c++ - 插入运算符的结果后 vector 中出现垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10418480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com