Rob*_*ert 5 c++ rvalue lvalue move-semantics
我最近开始学习int&& x = 10;右值、左值、移动语义,但我无法理解像 rvalue refs 这样的一些概念。(我认为右值引用是右值)?如果这是真的......有右值引用有什么意义?如果这是错误的,那么 rvalue ref 和 lvalue 之间有什么区别?
为什么我可以将一个值分配给右值引用,例如: int&& x = 10
那不是任务。这就是初始化。这里,临时对象是从整数常量具体化的,并且引用绑定到该临时对象。对于 const: 的左值引用也可以完成同样的事情const int& x = 10。不能使用对非常量的左值引用来完成此操作,因为它们不能绑定到右值。
这是否意味着右值引用是左值
只有表达式才具有值。int&& x = 10;是一个声明而不是一个表达式。因此,该声明首先没有值。
该声明包含一个10纯右值表达式。
类型也不是表达式,因此“右值引用是左值”是没有意义的。
变量也没有值类别。然而 id 表达式(只是命名变量的表达式)确实有一个值类别。无论命名变量的类型如何,它们都是左值 - 是的,即使类型是右值引用。