考虑以下代码:
class vector{
// ...
vector(int size){ /*...*/ };
vector& operator= (const vector& other){
// ...
}
};
int main(){
vector v1(5), v2(10);
v1 = v2;
}
我的operator =
应该做什么? v1
没有足够的容量来存储v2
的元素。从我的角度来看,它可以将自身重新初始化为10的容量,并复制其他向量的元素或抛出异常。我通常选择前一种方法,但越来越多地经常看到后者。哪一个是正确的?
答案 0 :(得分:5)
通常,用户希望在赋值x = y
之后,等式x == y
应该为真:赋值赋予语义等价。做其他事情会非常不寻常和令人惊讶。这可能包括不响应指令“make x
y
”而抛出异常。
答案 1 :(得分:1)
这完全取决于vector
的内容。
如果它是一个自动调整大小的矢量,你会期望调整大小。 std::vector
就是这么做的。
如果它是矩阵运算的数学向量,你不允许向量大小改变,那么它应该抛出异常。