C++ 左值引用和右值引用之间的差异
我一直在研究C++11中右值引用的加法。这并不简单,但我觉得我终于开始掌握它了。然而,有一个特别的例子让我感到困惑。具体来说,我不明白本例中“b”的含义:C++ 左值引用和右值引用之间的差异,c++,c++11,rvalue-reference,C++,C++11,Rvalue Reference,我一直在研究C++11中右值引用的加法。这并不简单,但我觉得我终于开始掌握它了。然而,有一个特别的例子让我感到困惑。具体来说,我不明白本例中“b”的含义: int a = 27; int&& b = 27; 编辑:我知道int a=27是一个左值而不是左值引用 另外,我要寻找的不是int&&b=27是什么,而是直觉上它是什么意思。我很困惑,因为我认为右值在不可寻址的地方,但这里我们有一个对右值的引用,这意味着我们可以寻址它。那么为什么它仍然是右值呢 B是右值引用,您只能为其分配
int a = 27;
int&& b = 27;
编辑:我知道int a=27是一个左值而不是左值引用
另外,我要寻找的不是int&&b=27是什么,而是直觉上它是什么意思。我很困惑,因为我认为右值在不可寻址的地方,但这里我们有一个对右值的引用,这意味着我们可以寻址它。那么为什么它仍然是右值呢 B是右值引用,您只能为其分配右值。
inta=27
是一条语句,既不是左值也不是右值。它定义了名称a
,该名称可用作int
类型的左值表达式
int&&b=27
也是一条语句,名称b
用作int&
类型的左值表达式,并允许转换为int
类型的xvalue表达式
但是这里我们有一个对右值的引用,这意味着我们可以处理它。那么为什么它仍然是右值呢
给定int&&b=27
,一个int
由27
构造,然后b
绑定到临时文件。(临时文件的生存期延长到b
的生存期)之后,如果您像&b
那样获得地址,您将获得临时文件的地址
顺便说一句,b本身就是左值
当prvalue被物化时,会创建临时对象,以便将其用作glvalue,这在以下情况下发生(自C++17起)
:
- 将引用绑定到prvalue
顺便说一句:这不是特别为右值参考;同样的事情发生在
const int&b=27
可能的重复@elvis.dukaj这不是正确的重复项我知道int a=27不是左值引用。这是左值。我只是在展示它们,因为它们在这里的意思似乎是一样的(尽管我知道它们不是)。另外,我确信关于左值和右值的问题有数百万个,但我特别想知道“int&&=27”是什么意思。可能重复的可能重复的可能重复的我知道它是右值引用。你需要在你的提问中更具体一些,这正是我想要知道的。所以它是一个左值,这意味着a和b在类型上是相等的?我明白了。所以int&&可以显式转换为int?@dawid您可以从int&&
初始化int&
,就像从int
或int&
初始化一样,是的。在int
的特定情况下没有区别,但是从std::vector&&
初始化std::vector
将执行与std::vector&
不同的操作