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

本文介绍了C++11的新特性,包括完美转发的概念,万能引用和std::forward的使用,以及新的默认生成函数如默认移动构造函数和移动赋值重载函数的细节。文章还讨论了强制生成和禁止默认函数的关键字default和delete,以及final和override的用途。此外,还探讨了可变参数模板,特别是参数包的展开方式,以及在list中使用emplace_back的优势。最后,介绍了C++11的lambda表达式及其在排序等场景中的应用。
摘要由CSDN通过智能技术生成

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:默认的移动构造函数

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值