在C ++中定义不同类型的引用之间的区别

时间:2014-07-09 15:26:35

标签: c++ reference const

在C ++中,为什么我可以这样做:

const int& x = 2;

但不是:

int& y = 2;

后者给了我编译错误:invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’.

2 个答案:

答案 0 :(得分:1)

要理解这里发生了什么,你需要回忆一下引用变量的含义:它是一个引用其他值的变量,它存储在内存中的其他地方。

现在回想一下const和非const引用之间的区别:后者指的是记忆中可修改的位置,而前者指的是不可修改的位置。

现在应该清楚为什么你不能用文字初始化一个可修改的引用:编译器在内存中没有可以通过非const引用修改的位置。当引用为const时,编译器可以为您提供这样的位置,就像它对字符串文字一样。从理论上讲,它可以为非const引用做同样的事情;但是,这样做很可能会隐藏编码错误,因此语言设计师决定反对它。

答案 1 :(得分:0)

嗯,说实话,常数" 2"你正在使用它并没有真正拥有它自己的"记忆区域。因此,无法创建指向此内存区域的引用。

这些特殊的价值也被称为" r-value"必须使用r值引用或const引用来处理:

int&& x;
const int& x;