据我所知,引用是一个保存对象地址的变量。 因此我不明白这一点:
#include <iostream>
#include<string>
char* lol[]={"123","abc"};
char* fu(int i){return lol[i];};
int main ()
{
const string& ru=fu(0);
lol[0]="567";
cout<<ru<<endl<<lol[0];
return 0;
}
输出:
123
567
我很期待
567
567
因为我知道 ru 持有 lol[0] 的地址,所以当我更改 lol[0] 时,ru 必须把那个零钱还给我。 谁能解释一下为什么会这样?
最佳答案
fu
返回 char*
,但您使用它来初始化对不同类型 string
的引用。这通过创建一个临时的 string
来解决,其中包含指针引用的字符串拷贝,并使用该临时字符串初始化引用。更改 lol[0]
不会影响该字符串。
如果您想要对指针lol[0]
的引用,那么fu
将必须返回一个引用,而ru
将具有成为对正确类型的引用:
char *& fu(int i){return lol[i];}
char *& ru = fu(0);
(顺便说一下,您应该使用 const char *
来指向字符串文字,因为它们是常量。过去允许转换为 char*
历史原因,但自 2011 年起被禁止)。
关于c++ - 本地引用不引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908712/