【发布时间】:2021-01-03 17:22:00
【问题描述】:
我最近开始学习右值、左值、移动语义,但我无法理解诸如右值引用之类的一些概念。为什么我可以为右值引用分配一个值,例如:int&& x = 10;.. 这不意味着右值引用是左值(我认为右值引用是右值)?如果这是真的......拥有右值引用有什么意义?如果那是假的,那么右值 ref 和左值有什么区别?
【问题讨论】:
-
这是初始化,您最初将引用绑定到一个临时对象,从而延长后者的生命周期。
-
哦,我刚刚测试了一些东西:如果我有一个带有参数的函数 -> rvalue ref ... 该函数只需要 rvalues .. 如果我尝试给它一个简单的变量,它会给出一个错误
-
@Robert 是的,这是一个更好的用例。你甚至可以创建两个重载函数,一个接受左值引用,一个接受右值引用。然后它开始变得非常有用,因为您知道何时可以移动以及何时需要复制。
-
@Robert 一个变量本身就是一个左值,不管它的类型。您需要明确地
std::move它。 @rustyx cppreference.org 就足够了。
标签: c++ move-semantics rvalue lvalue