C++ 为什么赋值运算符应该返回 const ref 以避免 (a=b)=c

2023-12-22

我正在读一本关于 C++ 的书,更准确地说是关于运算符重载的书。

示例如下:

const Array &Array::operator=(const Array &right)
{
// check self-assignment
// if not self- assignment do the copying
return *this; //enables x=y=z
}

书中提供的关于返回 const ref 而不是 ref 的解释是为了避免诸如 (x=y)=z 之类的赋值。我不明白为什么我们应该避免这种情况。我知道在这个例子中 x=y 首先被评估,因为它返回一个 const 引用,所以 =z 部分无法执行。但为什么?


(x=y) means x.operator=(y),它返回对象x。所以,(x=y)=z means (x.operator=(y)).operator=(z)。括号内的表达式集合x to y并返回x,然后外部位设置x to z。它没有设置y to z正如您所期望的,并且正如表达式x = y = z does.

这种行为是违反直觉的(赋值后它们应该都是相等的,对吧?);返回常量引用使其不可能并避免该问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 为什么赋值运算符应该返回 const ref 以避免 (a=b)=c 的相关文章

随机推荐