左值引用和右值引用之间的区别
Difference between lvalue reference and rvalue reference
我一直在研究 C++11 中右值引用的添加。这并不简单,但我觉得我终于开始掌握它了。然而,有一个特殊的例子让我感到困惑。具体来说,我不明白这个例子中"b"的含义是什么:
int a = 27;
int&& b = 27;
编辑:我知道int a = 27是一个左值而不是左值引用。
此外,我寻找的不是int&&b = 27是什么,而是直觉上的含义。我很困惑,因为我认为右值是不可寻址的,但在这里我们有一个对右值的引用,这意味着我们可以解决它。那么为什么它仍然是一个右值呢?
int a = 27;
是一个语句,既不是左值也不是右值。它定义了名称a
,可用作int
类型的左值表达式。
int&& b = 27;
也是一个语句,名称b
用作类型为int&&
的左值表达式,并允许转换为类型为int
的xvalue表达式
但在这里我们引用了右值,这意味着我们可以解决它。那么为什么它仍然是一个右值呢?
给定int&& b = 27;
,一个临时int
由27
构造而成,然后b
绑定到临时。(并且临时的生存期延长至b
的生存期。之后,如果您获得像&b
这样的地址,您将获得临时地址。
顺便说一句,b
本身就是一个左值。
在以下情况下
when a prvalue is materialized so that it can be used as a glvalue, which occurs (since C++17)
创建临时对象:
- 将引用绑定到 prvalue
顺便说一句:对于右值引用来说,这不是特别的;同样的事情发生在const int& b = 27;
身上。
B 是右值引用,您只能为其分配右值。
相关文章:
- 在 const 函数中通过引用和指针返回之间的区别
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 引用捕获和在 lambda 中通过引用发送参数有什么区别 (C++)
- 在 Rust 中,指针和引用有什么区别?
- 常量引用和引用之间的区别
- 按值和引用传递指针之间的区别?
- C++ 对非常量对象的常量引用和对非常量对象的非常量引用之间的区别
- 普通的右值引用和 std::forward 返回的引用有什么区别?
- 右值引用和左值引用有什么区别?
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 左值引用和右值引用之间的区别
- 通过引用传递对象和基元之间的区别
- lambda 表达式中引用捕获的 constexpr 变量和非显式捕获的 constexpr 变量之间的区别
- 将函数的引用和 lambda 表达式作为参数传递时有什么区别?
- 返回右值引用和 &&限定函数中的值之间的区别
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 通过命名成员调用虚拟与地址或引用的区别
- DLL 引用之间的区别?和用途?
- 通过函数指针调用函数 - 是否取消引用指针?有什么区别?
- 句柄、指针和引用之间有什么区别