Bootstrap

C++11更新内容(2)--完美转发--默认移动构造/移动赋值--1116

1.完美转发

1.1万能引用

void Fun(int &x){ cout << "左值引用" << endl; }
void Fun(const int &x){ cout << "const 左值引用" << endl; }

void Fun(int &&x){ cout << "右值引用" << endl; }
void Fun(const int &&x){ cout << "const 右值引用" << endl; }
template<typename T>
void PerfectForward(T&& t)
{
 Fun(t);
}

模板中的&&不代表右值引用,而是万能引用,其既能接收左值又能接收右值。 模板的万能引用只是提供了能够接收同时接收左值引用和右值引用的能力。但是引用类型的唯一作用就是限制了接收的类型,后续使用中都退化成了左值。

如果希望能够在传递过程中保持它的左值或者右值的属性, 就需要用完美转发

1.2 std::forward

template<typename T>
void PerfectForward(T&& t)
{
 Fun(std::forward<T>(t));
}

 

 2. 新的类功能

2.1 新的默认生成函数

原来C++类中,有6个默认成员函数:

1. 构造函数 2. 析构函数 3. 拷贝构造函数 4. 拷贝赋值重载 5. 取地址重载 6. const 取地址重载

2.1.1 新增1:默认的移动构造函数

如果没有实现移动构造函数,而且没实现 析构函数&&拷贝构造函数&&拷贝赋值重载

编译器会自动生成一个默认的移动构造函数。该构造函数对于内置类型成员进行逐字节拷贝,对于自定义类型,需要看其是否实现了移动构造函数。实现了就用其的移动

;