如何解决为什么我可以为右值引用赋值?
我最近开始学习右值、左值、移动语义,但我无法理解一些概念,例如 rvalue refs .. 为什么我可以为 rvalue ref 赋值,例如:int&& x = 10;
.. 不是吗意味着右值引用是左值(我认为右值引用是右值)?如果这是真的......有右值引用有什么意义?如果这是错误的,那么右值引用和左值之间有什么区别?
解决方法
为什么我可以为右值引用赋值,例如:int&& x = 10
那不是任务。这就是初始化。在这里,一个临时对象从整数常量中具体化,并且引用绑定到该临时对象。对 const 的左值引用也可以做同样的事情:const int& x = 10
。不能使用对非常量的左值引用来完成,因为它们不能绑定到右值。
这是否意味着右值引用是左值
只有表达式才有值。 int&& x = 10;
是声明而不是表达式。因此,声明一开始就没有值。
声明包含一个表达式 10
,它是一个纯右值。
类型也不是表达式,所以“右值引用是左值”是没有意义的。
变量也没有值类别。然而 id-expressions - 这只是命名变量的表达式 - 确实有一个值类别。无论命名变量的类型如何,它们都是左值 - 是的,即使类型是右值引用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。