为什么我可以为右值引用赋值?

Rob*_*ert 5 c++ rvalue lvalue move-semantics

我最近开始学习int&& x = 10;右值、左值、移动语义,但我无法理解像 rvalue refs 这样的一些概念。(我认为右值引用是右值)?如果这是真的......有右值引用有什么意义?如果这是错误的,那么 rvalue ref 和 lvalue 之间有什么区别?

eer*_*ika 7

为什么我可以将一个值分配给右值引用,例如: int&& x = 10

那不是任务。这就是初始化。这里,临时对象是从整数常量具体化的,并且引用绑定到该临时对象。对于 const: 的左值引用也可以完成同样的事情const int& x = 10。不能使用对非常量的左值引用来完成此操作,因为它们不能绑定到右值。

这是否意味着右值引用是左值

只有表达式才具有值。int&& x = 10;是一个声明而不是一个表达式。因此,该声明首先没有值。

该声明包含一个10纯右值表达式。

类型也不是表达式,因此“右值引用是左值”是没有意义的。

变量也没有值类别。然而 id 表达式(只是命名变量的表达式)确实有一个值类别。无论命名变量的类型如何,它们都是左值 - 是的,即使类型是右值引用。