左值参考和右值参考之间的差异

时间:2018-05-23 09:42:40

标签: c++ c++11 rvalue-reference

我一直在研究在C ++ 11中添加rvalue引用。这不是直截了当但我觉得我终于开始掌握它了。然而,有一个特殊的例子我很困惑。具体来说,我不知道' b'是什么意思?在这个例子中:

int a = 27;
int&& b = 27;

编辑:我知道int a = 27是左值而不是左值参考。

我所寻找的并不是什么int&& b = 27 但直观地说意义是什么。我很困惑,因为我认为rvalues不可寻址,但在这里我们有一个rvalue的引用,这意味着我们可以解决它。那它怎么还是一个左值?

3 个答案:

答案 0 :(得分:6)

int a = 27;是一个语句,既不是左值也不是左值。它定义了 name a,它可以用作int类型的左值表达式

int&& b = 27;也是语句,名称b用作int&&类型的左值表达式,并允许转换为int

类型的xvalue表达式

答案 1 :(得分:5)

  

但是这里我们引用了rvalue,这意味着我们可以解决它。那么为什么它仍然是一个左值?

鉴于int&& b = 27;int 27b构建,然后b与临时绑定。 (并且临时的生命周期延长到&b的生命周期。)之后,如果您获得b之类的地址,您将获得临时地址。

BTW when a prvalue is materialized so that it can be used as a glvalue, which occurs (since C++17)本身就是一个左值。

  

在以下情况下创建临时对象const int& b = 27;

     
      
  • 将引用绑定到prvalue
  •   

顺便说一句:它对于右值参考并不特别;同样的事情发生在radial-gradient

答案 2 :(得分:-1)

B是右值参考,您只能为其分配右值。