为什么在 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)
。这两个函数可以重载,编译器会选择一个合适的。
我是从'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)
。这两个函数可以重载,编译器会选择一个合适的。