参考
C++11引入了右值引用,用 && 表示右值引用,如 int &&a = add(1,2)
什么是左值和右值
等号 “=” 左边的 a 为左值,右边的 10 为右值;具体地说就是较难获取到具体地址的值,大多数都是临时变量。地址是不确定的。
1. 硬编码的字面量,如int a =10中的10,char *s = "hello world"中的“hello world”都是右值 2. 函数的返回值,如add(1,2)的返回值3也是右值,这里的3是临时值 3. 表达式的计算值,如int a =1,b =2;int c = a+b;中的a+b的值也是右值,这里a+b的值也是临时值
|
移动构造函数:转移类成员的所有权
std::move:把一个左值引用“强制转换”为右值引用。
emplace_back
template< class... Args > void emplace_back( Args&&... args );
|
从函数声明中,我们看到其参数是右值引用,右值引用可以用来干什么?移动元素的所有权!
vector<A> vec; A a(10); vec.emplace_back(std::move(a)); //输出结果为: constructor move constructor
|