在C ++中,为什么我可以这样做:
const int& x = 2;
但不是:
int& y = 2;
?
后者给了我编译错误:invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’.
答案 0 :(得分:1)
要理解这里发生了什么,你需要回忆一下引用变量的含义:它是一个引用其他值的变量,它存储在内存中的其他地方。
现在回想一下const
和非const
引用之间的区别:后者指的是记忆中可修改的位置,而前者指的是不可修改的位置。
现在应该清楚为什么你不能用文字初始化一个可修改的引用:编译器在内存中没有可以通过非const
引用修改的位置。当引用为const
时,编译器可以为您提供这样的位置,就像它对字符串文字一样。从理论上讲,它可以为非const
引用做同样的事情;但是,这样做很可能会隐藏编码错误,因此语言设计师决定反对它。
答案 1 :(得分:0)
嗯,说实话,常数" 2"你正在使用它并没有真正拥有它自己的"记忆区域。因此,无法创建指向此内存区域的引用。
这些特殊的价值也被称为" r-value"必须使用r值引用或const引用来处理:
int&& x;
const int& x;