为什么在向量类中实现operator =时返回const引用

时间:2015-03-18 11:39:07

标签: c++ vector reference const return-type

我是从'C ++中的数据结构和算法分析'中读到的。成员函数operator=的返回类型是const Vector&。我想知道以后是否可以修改矢量?

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

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

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

1 个答案:

答案 0 :(得分:1)

通常operator=会向调用者返回非const引用。例如,您可以在STL的类中看到这一点。 但是,返回类型很少重要,因为从赋值返回一些东西是一个额外的效果,例如,允许链接:

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

operator=也可以是void,并且无法在其他地方使用赋值表达式。但是他们仍然会工作,修​​改它的论点并让它可以修改,即非const:

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的修改与赋值运算符的返回类型无关,但与副作用无关。

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