绑定T&&类型的左值表达式

时间:2013-09-15 19:40:21

标签: c++ c++11 rvalue-reference lvalue

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

int&& x = 12;
因此,

xint&&类型的左值表达式。由于x是左值,因此它可以绑定到相同类型的左值引用,即类型为int&&的左值引用。这样的左值参考将被定义为:

int&& & ref_x = x; // non-working code, just for the sake of explanation

当然,不可能明确定义对引用的引用,并且执行绑定的正确方法如下:

int& ref_x = x;

C ++ Primer报告了有关使用引用作为初始化器的以下内容:

  

当我们使用引用作为初始化器时,我们确实使用了   引用绑定到的对象

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

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

如果您感到困惑,请继续告诉自己:表达式的值始终是对象类型。表达式的值 category 是l还是r只决定值可以绑定到哪种类型的东西;它对它的类型没有影响。