我是从'C ++中的数据结构和算法分析'中读到的。成员函数operator=
的返回类型是const Vector&
。我想知道以后是否可以修改矢量?
C ++ Primer说我们不能更改const引用,它给出了这个例子:
const string& shorterString(const string& s1 , const string& s2)
shorterString("hi","bye") = "X" //wrong
答案 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)
。这两个函数可以是重载,编译器将选择合适的函数。