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

Confusion about overloading assignment operator

本文关键字:赋值运算符 重载 于重载      更新时间:2023-10-16

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

但有一件事让我感到困惑。假设有两个原型:

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

两者都在'a=b=c'的情况下工作。那么,哪一个更好或正确?

对于初学者来说,将您的类命名为"Vector"可能会导致频繁的混淆和混淆,std::vector .你应该选择一个更好的名字。不幸的是,"阵列"现在也被占用了...

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

有趣的是,我个人会选择第一个,原因是第二个,在结果上强迫恒定。这可能是你不想要的东西,如果你愿意,你也可以在外部强制执行恒常性,通过使用 const 等从外部函数返回。至少您可以手动修改矢量分量。