operator =在不同维度的向量上

时间:2014-02-11 21:04:48

标签: c++ operators assignment-operator assign

考虑以下代码:

class vector{
   // ...
   vector(int size){ /*...*/ };
   vector& operator= (const vector& other){
   // ...
   }
};

int main(){
   vector v1(5), v2(10);
   v1 = v2;
}

我的operator =应该做什么? v1没有足够的容量来存储v2的元素。从我的角度来看,它可以将自身重新初始化为10的容量,并复制其他向量的元素或抛出异常。我通常选择前一种方法,但越来越多地经常看到后者。哪一个是正确的?

2 个答案:

答案 0 :(得分:5)

通常,用户希望在赋值x = y之后,等式x == y应该为真:赋值赋予语义等价。做其他事情会非常不寻常和令人惊讶。这可能包括不响应指令“make x y”而抛出异常。

答案 1 :(得分:1)

这完全取决于vector 的内容。

如果它是一个自动调整大小的矢量,你会期望调整大小。 std::vector就是这么做的。

如果它是矩阵运算的数学向量,你不允许向量大小改变,那么它应该抛出异常。