gpt4 book ai didi

c++ - 本地引用不引用

转载 作者:行者123 更新时间:2023-11-30 01:56:16 25 4
gpt4 key购买 nike

据我所知,引用是一个保存对象地址的变量。因此我不明白这一点:

#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com