C++11——右值引用&完美转发
总而言之,右值引用,完美转发,std::move()都是为了在程序运行过程中,避免变量多次重复的申请和释放内存空间,使用移动语义将申请的空间通过这几种方式进行循环使用,避免重新开辟新空间和拷贝浪费算力。右值引用
一、什么是右值引用?
在 C++ 中:
[*]左值(Lvalue):有名字、有地址、可以被引用(如变量 x)
[*]右值(Rvalue):临时对象、没有名字、无法被再次引用(如字面值 5,表达式 x + y)
语法:
int&& r = 10; // r 是一个右值引用右值引用使用 && 定义。
二、为什么需要右值引用?
传统的 C++(C++03)只有拷贝语义,会频繁复制对象,性能开销大。
右值引用的目的:
[*]避免不必要的拷贝
[*]支持移动语义
三、右值引用与移动构造函数
来看一个例子:
#include #include using namespace std;class Buffer {public: int* data; size_t size; Buffer(size_t s) : size(s) { data = new int; cout
页:
[1]