c++ - 为什么我可以为引用分配新值,以及如何使引用引用其他内容?

标签 c++ reference

我有几个与 C++ 中引用的使用有关的问题。

  1. 在下面显示的代码中,它是如何工作的,并且在 q = "world"; 行不报错?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      char *p = "Hello";
      char* &q = p;
      cout <<p <<' '<<q <<"\n";
      q = "World"; //Why is there no error on this line
      cout <<p <<' '<<q <<"\n";
    }
    
    1. 如何将引用 q 重新初始化为其他内容?

    2. 字符串文字 p = "Hello" 不是常量还是只读空间?所以如果我们这样做,

      q = "World";
      

      p处应该是常量的字符串不会被改变吗?

  2. 我已经阅读了有关 C++ 引用类型变量的信息,因为它们不能被重新初始化或重新分配,因为它们被“内部”存储为常量指针。所以编译器会报错。

    但实际上如何重新分配引用变量?

    int i;
    
    int &j = i;
    
    int k;
    
    j = k; //This should be fine, but how we reassign to something else to make compiler flag an error?
    

    我正在尝试获取此引用资料,其中可能遗漏了一些相关的关键内容,因此提出了这些问题。

因此,任何清除此问题的指针都会很有用。

最佳答案

    • a) 不能,您引用的行不会更改引用 q,它会更改 p
    • b) 不是文字是常量,但 p 是一个指向文字的指针。 指针可以更改,所指向的内容不能更改。 q = "world"; 使指针 p 指向别的东西。
  1. 你似乎认为这段代码

    int i;
    int &j = i;
    int k;
    j = k;
    

    正在重新分配引用,但事实并非如此。 就是把k的值赋给ij还是指i。 我猜这是你的主要误解。

关于c++ - 为什么我可以为引用分配新值,以及如何使引用引用其他内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7181372/

相关文章:

c++ - 为什么我应该使用引用变量?

c++ - 清除 vector 数组的最有效方法

c++ - 终止调用引发异常中止陷阱 : 6

c++ - 获取本地对象的常量引用

python - Python 中是否会自动清除临时引用?

java - 更改引用而不显式更改其引用

c++ - GLTest.exe 中的 opengl 错误 : Unhandled exception at 0x0251D09F (ig4dev32. dll):0xC0000005:访问冲突读取位置 0x00000000

c++ - 函数类型可以是类模板参数吗?

c++ - Qt:QWidget::paintEngine:不应再调用

javascript - 复制变量javascript