在过去的几天里,我一直试图掌握左值/左值参考背后的一个明显的微不足道的原则。让我们定义一个新的右值参考:
int&& x = 12;
因此, x
是int&&
类型的左值表达式。由于x
是左值,因此它可以绑定到相同类型的左值引用,即类型为int&&
的左值引用。这样的左值参考将被定义为:
int&& & ref_x = x; // non-working code, just for the sake of explanation
当然,不可能明确定义对引用的引用,并且执行绑定的正确方法如下:
int& ref_x = x;
C ++ Primer报告了有关使用引用作为初始化器的以下内容:
当我们使用引用作为初始化器时,我们确实使用了 引用绑定到的对象
另一方面,左值引用必须与左值表达式的类型匹配。我错过了什么?在这种情况下是否涉及参考崩溃?
感谢。
答案 0 :(得分:1)
不,x
(作为表达式)是int
类型的表达式。表达式的值的类型永远不是引用。实际上,x
也是左值,因为它是一个命名的东西。
此外,由于同样的原因,没有对引用的引用:引用绑定到值,值永远不会引用。
如果您感到困惑,请继续告诉自己:表达式的值始终是对象类型。表达式的值 category 是l还是r只决定值可以绑定到哪种类型的东西;它对它的类型没有影响。