【C++】右值引用,移动语义,完美转发

目录

  • 右值引用
  • 移动语义
    • 拷贝构造与移动构造
  • 万能引用与完美转发

右值引用

左值:可以出现在赋值符号的左边和右边,左值可以取地址。
右值:右值可以出现在赋值符号右边,不能出现在左边,右值不能取地址。
左值/右值引用就是给左值/右值起别名。

	int x = 1, y = 2;
	int& r1 = x;//左值引用
	const int& r2 = x + y;//const左值引用可引用右值

	int&& rr1 = 10;//右值引用
	int&& rr2 = x + y;
	int&& rr3 = move(x);//右值引用可引用move后的左值

移动语义

移动语义可以直接获取将亡资源,减少拷贝

拷贝构造与移动构造

(实际上在 func 返回时,发生了两次拷贝,这个过程编译器在这里做了优化)
【C++】右值引用,移动语义,完美转发_第1张图片
移动构造
【C++】右值引用,移动语义,完美转发_第2张图片

万能引用与完美转发

完美转发能够保持原来的值属性不变

对于一个Object类,有以下方法定义,若不使用完美转发,对象经过多层调用传递后值属性不能够保持
【C++】右值引用,移动语义,完美转发_第3张图片

使用万能引用, universal reference
【C++】右值引用,移动语义,完美转发_第4张图片
使用完美转发,可保持原属性
【C++】右值引用,移动语义,完美转发_第5张图片

你可能感兴趣的:(c++,开发语言)