如何通过更改参数值来阻止此添加过载?

时间:2013-09-17 23:13:23

标签: c++ overloading operator-keyword addition

    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'我该怎么做?

1 个答案:

答案 0 :(得分:0)

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

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

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