c++ - 本地引用不引用

标签 c++ reference

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

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

相关文章:

c++ - 在 QVector<std::unique_ptr<Type>> 上使用 std::find

c++ - 访问由 std::find() 找到的项目

c++ - 在命令行参数中查找出现的字母

c++ - C++中类的成员函数的内存空间是什么时候分配的?

C++ 将元素从一个 vector 移动到另一个 vector

java - 在 Java 中设置为相等 : by value or reference?

c++ - 类函数的 undefined reference 错误

c++ - 将对象传递给另一个类 C++ 中的函数

c++ - 引用类成员(是)导致未定义的行为

python - 何时在 PySide 中设置父级