这是我现在无法解决的问题:为什么const string&
可以分配给nonconst变量并进一步修改?
const string& shorter_s(const string &s1, const string &s2) {
return s1.size() < s2.size() ? s1 : s2;
}
int main() {
const string s1 = "longer", s2 = "short";
string result = shorter_s(s1, s2);
cout << result << endl;
result += "++";
cout << result << endl;
}
结果是:
short
short++
不是result
想要引用const string s2
对象,而这可以通过添加"++"
进行修改吗?
答案 0 :(得分:8)
string result = shorter_s(s1, s2);
因为result
不是参考。函数调用的结果被赋值给一个值变量,这意味着它被复制了。 result
没有引用s2
,因为它没有引用任何变量,因为它不是引用。
如果您希望将引用到某个内容,那么请将其作为参考,您将看到无法将其作为可变参考:
string& result = shorter_s(s1, s2); // doesn't compile
const string& result = shorter_s(s1, s2); // OK
答案 1 :(得分:3)
因为您将其分配给非常量非引用变量。这意味着该值将被复制,您可以随意修改副本。