C++为什么可以修改返回的常量引用

C++ why returned const reference can be modified?

本文关键字:常量 引用 返回 修改 为什么 C++      更新时间:2023-10-16
这是我

现在无法解决的问题:为什么const string&可以分配给非常量变量并进一步修改?

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对象,它不能通过添加"++"来修改吗?

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

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