C++为什么可以修改返回的常量引用
C++ why returned const reference can be modified?
这是我
现在无法解决的问题:为什么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
因为您将其分配给非常量非引用变量。这意味着该值将被复制,您可以随意修改副本。
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?