关于重载赋值运算符的困惑

时间:2016-02-19 12:01:12

标签: c++ operator-overloading

假设有一个名为Vector的类,我想重载它的赋值运算符,使它能够像这样工作: a = b = c;(a,b,v是Vector类的对象)

但有一件事困扰我。 假设有两个原型:

Vector & operator=(const Vector & v);
const Vector & operator=(const Vector & v);

两者都适用于' a = b = c'的情况。 那么,哪一个更好还是更好?

2 个答案:

答案 0 :(得分:3)

对于初学者来说,命名你的班级“Vector”可能会导致频繁的混淆和混淆,std::vector。你应该选择一个更好的名字。不幸的是,“阵列”现在也被采用......

第一个是标准赋值运算符。当然,赋值运算符只是为可变类实例定义的,所以它应该返回对可变类实例的引用。

答案 1 :(得分:1)

有趣的是,我个人会选择第一个,原因是第二个,就是强制结果的常数。这可能是你不想要的东西,你可以通过外部函数返回const等来从外部强制执行const。 至少您可以手动手动修改矢量组件。