Item10:令 operator = 返回一个 reference to *this

《Effective C++》中的 Item10“令 operator = 返回一个 reference to *this”(Have assignment operators return a reference to *this)为我们提供了关于赋值运算符重载的重要指导。本文将深入探讨这一条款,分析其背后的原因、实际应用以及遵循该准则的好处。 

一、核心准则

Item10 的核心准则简洁明了:在重载赋值运算符时,应让其返回一个指向当前对象的引用(reference to *this)

这一准则并非 C++ 语言的强制规定,而是一种被广泛遵循的编程惯例。遵循这一惯例能够使赋值运算符的行为与内置类型的赋值运算符保持一致,支持连续赋值等操作,提升代码的可读性和易用性。

二、为何要返回 reference to *this

(一)与内置类型的行为保持一致

在 C++ 中,内置类型的赋值运算符支持连续赋值,例如:

int a, b, c;
a = b = c = 10;

上述代码的执行顺序是从右向左,先将 10 赋值给 c,再将 c 的值赋值给 b,最后将 b 的值赋值给 a。这一过程能够顺利进行,是因为内置类型的赋值操作返回的是被赋值对象的引用,使得后续的赋值操作可以继续进行。

如果用户自定义类型的赋值运算符不遵循返回 reference to *this 的惯例,那么连续赋值操作就无法实现,这会让用户感到困惑,因为它与内置类型的行为不一致。

(二)支持运算符的链式操作

除了连续赋值外,返回 reference to *this 还能支持其他依赖赋值运算符返回值的链式操作。例如,在一些情况下,可能需要在赋值之后立即对对象进行其他操作,如:

MyClass obj1, obj2, obj3;
(obj1 = obj2) = obj3;

如果operat

你可能感兴趣的:(Effective,C++,c++,开发语言)