1

在过去的几天里,我一直试图掌握左值/右值引用背后的一个明显微不足道的原则。让我们定义一个新的右值引用:

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 报告了以下关于使用引用作为初始值设定项的内容:

当我们使用引用作为初始化器时,我们实际上是在使用引用绑定到的对象

另一方面,左值引用必须与左值表达式的类型相匹配。我错过了什么?在这种情况下是否涉及参考崩溃?

谢谢。

4

1 回答 1

1

不,x(作为表达式)是类型的表达式int。表达式值的类型永远不是引用。事实上,x也是一个左值,因为它是一个命名的东西。

此外,出于同样的原因,没有对引用的引用:引用绑定到值,而值永远不是引用。

如果您感到困惑,请不断告诉自己:表达式的值始终是对象类型。表达式的值类别是 l 还是 r 只决定了该值可以绑定到什么样的事物上;它对其类型没有影响。

于 2013-09-15T19:52:49.627 回答