C++ 11 - 右值引用变量
C++ 11 - rvalue reference variables
两者有什么区别
int a = 42;
和
int&& rvr = 42;
?
a
显然是一个lvalue
,但rvr
也是一个lvalue
,因为它是一个命名变量,那么这些表达式是否可以被认为是完全等价的,如果不是,在哪些情况下int&&
声明是首选的?
它们并不完全等价。你是对的,两个变量都是左值,但对于大多数类型,形式的初始化
T a = b;
创建一个临时T
对象,然后从该临时对象构造a
。可以省略该临时对象,但它仍然需要适当的构造函数可用。
T &&a = b;
另一方面,将a
直接绑定到b
,但要求b
是右值。所以:
int a = 3;
// int&&b = a; // error: && cannot bind to lvalues
int b = a; // okay
struct S { S(const S &) = delete; };
S f();
// S s = f(); // error: no copy or move constructor available
S&&s = f(); // okay
更简单地说,decltype
也会给出不同的结果以供参考。
相关文章:
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 多个"常量引用"变量可以共享同一个内存吗?
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- C++方法中的引用变量
- 作为赋值(增加引用变量)C++的左操作数所需的左值
- 使用更改此变量的函数在同一行中打印引用变量
- 将延迟变量分配给引用变量
- 如何通过引用获取引用变量的地址?
- 将引用变量传递给函数
- C++中引用变量的内存?
- 按名称存储和引用变量列表
- 返回一个C++引用变量 VS 返回一个变量
- c++ 在 if 语句中分配引用变量
- 引用变量何时合适,为什么?你能解释一下实际的语法和位置吗?
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 在类范围内声明时,应在 C++14 中引用变量模板
- 当引用变量的引用"死亡"时,它会发生什么?
- 将非按引用变量分配给返回按引用的函数,反之亦然
- 引用变量如何存储在mem中
- 引用变量存储在哪里