为什么我可以为右值引用赋值?
Why can i assign a value to a rvalue reference?
我最近开始学习右值、左值、移动语义,但我无法理解一些概念,例如右值引用.. 为什么我可以为右值引用分配一个值,例如:int&& x = 10;
.. does'这是否意味着右值引用是左值(我认为右值引用是右值)?如果那是真的……右值引用有什么意义?如果那是错误的,那么右值引用和左值之间有什么区别?
why can I assign a value to a rvalue ref like : int&& x = 10
这不是作业。那就是初始化。在这里,一个临时对象从整数常量具体化,并且引用绑定到该临时对象。对 const 的左值引用也可以做同样的事情:const int& x = 10
。它不能用对非常量的左值引用来完成,因为它们不能绑定到右值。
doesn't that mean that an rvalue ref is an lvalue
只有表达式才有值。 int&& x = 10;
是声明而不是表达式。因此声明首先没有值。
声明包含一个表达式 10
,它是一个纯右值。
类型也不是表达式,所以“右值引用是左值”是没有意义的。
变量也没有值类别。然而,id 表达式——只是命名变量的表达式——确实有一个值类别。无论命名变量的类型如何,它们都是左值 - 是的,即使类型是右值引用。
我最近开始学习右值、左值、移动语义,但我无法理解一些概念,例如右值引用.. 为什么我可以为右值引用分配一个值,例如:int&& x = 10;
.. does'这是否意味着右值引用是左值(我认为右值引用是右值)?如果那是真的……右值引用有什么意义?如果那是错误的,那么右值引用和左值之间有什么区别?
why can I assign a value to a rvalue ref like : int&& x = 10
这不是作业。那就是初始化。在这里,一个临时对象从整数常量具体化,并且引用绑定到该临时对象。对 const 的左值引用也可以做同样的事情:const int& x = 10
。它不能用对非常量的左值引用来完成,因为它们不能绑定到右值。
doesn't that mean that an rvalue ref is an lvalue
只有表达式才有值。 int&& x = 10;
是声明而不是表达式。因此声明首先没有值。
声明包含一个表达式 10
,它是一个纯右值。
类型也不是表达式,所以“右值引用是左值”是没有意义的。
变量也没有值类别。然而,id 表达式——只是命名变量的表达式——确实有一个值类别。无论命名变量的类型如何,它们都是左值 - 是的,即使类型是右值引用。