C ++为什么返回const引用可以修改?

时间:2018-01-12 08:31:38

标签: c++ reference const

这是我现在无法解决的问题:为什么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对象,而这可以通过添加"++"进行修改吗?

2 个答案:

答案 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)

因为您将其分配给非常量非引用变量。这意味着该值将被复制,您可以随意修改副本。