如何阻止此添加重载更改参数的值?

How can i stop this addition overload from changing the parameter's value?

本文关键字:参数 何阻止 添加 重载      更新时间:2023-10-16
    VecXd &operator+=(VecXd<T> &addend){
        if(dimension != addend.dimension)
            cout << "The vector dimensions are not equal";
        else{
            for(int i=0; i< dimension; i++)
                vector[i] = vector[i] + addend.vector[i];
        }
        return *this;
    }
 friend VecXd &operator+(VecXd<T> &vec, VecXd<T> &addend){
         return vec+=addend;
     }

当做 a + b 时,第一个"a"也会改变总和。我认为通过使用引用,我不会影响原始向量。如何在不更改"a"的情况下执行此操作?

只需按值而不是按引用将vec传递给operator+。或者,通过const引用传递它并制作副本。另外,不要从operator+返回引用 - 没有对象可供您返回引用。

 friend VecXd operator+(const VecXd<T> &vec, const VecXd<T> &addend){
     VecXd<T> copy(vec);
     return copy+=addend;
 }

添加产生的对象必须是临时的,因为没有永久的位置可以放置它。因此,您无法通过引用返回它。