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

4

1 回答 1

0

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

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

添加产生的对象必须是临时的,因为没有永久的地方可以放置它。所以你不能通过引用返回它。

于 2013-09-17T23:16:13.960 回答