我一直在研究在C ++ 11中添加rvalue引用。这不是直截了当但我觉得我终于开始掌握它了。然而,有一个特殊的例子我很困惑。具体来说,我不知道' b'是什么意思?在这个例子中:
int a = 27;
int&& b = 27;
编辑:我知道int a = 27是左值而不是左值参考。
我所寻找的并不是什么int&& b = 27 但直观地说意义是什么。我很困惑,因为我认为rvalues不可寻址,但在这里我们有一个rvalue的引用,这意味着我们可以解决它。那它怎么还是一个左值?
答案 0 :(得分:6)
int a = 27;
是一个语句,既不是左值也不是左值。它定义了 name a
,它可以用作int
类型的左值表达式。
int&& b = 27;
也是语句,名称b
用作int&&
类型的左值表达式,并允许转换为int
答案 1 :(得分:5)
但是这里我们引用了rvalue,这意味着我们可以解决它。那么为什么它仍然是一个左值?
鉴于int&& b = 27;
,int
27
由b
构建,然后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是右值参考,您只能为其分配右值。