为什么在 vector class 中实现 operator= 时 return const 引用

Why return const reference when implement the operator= in vector class

我是从'Data Structures and Algorithm Analysis in C++'读到的。成员函数operator=的return类型为const Vector&。我想知道以后是否可以修改向量?

C++ Primer 说我们不能更改 const 引用,它给出了这个例子:

const string& shorterString(const string& s1 , const string& s2)

shorterString("hi","bye") = "X" //wrong 

通常 operator= return 是对调用者的非常量引用。例如,您可以在 STL 的 类 中看到这一点。 然而,return 类型很少重要,因为赋值给 return 的东西是一个附加效果,例如,允许链接:

a = (b = (c = d));
(a = b).callMethod();

operator= 也可以是 void,赋值表达式不能用在其他地方。但他们仍然会工作,修​​改它的参数并使其可修改,即非常量:

A a, b, c;
b = c; //call, say, void A::operator=(const A &)
a = b; //ditto
//a = b = c; //impossible here
a = c; //works

所以,a的修改与赋值运算符的return类型无关,而是副作用

至于你的第二个例子,shorterString 有两个 const 引用和 return 其中之一,显然应该保留它 const。如果您需要以非 const 方式处理结果,则还必须使用非 const 参数:string& shorterString(string& s1, string& s2)。这两个函数可以重载,编译器会选择一个合适的。