【C++ 2.0-侯捷老师】右值引用,移动语义,完美转发,性能测试

本文探讨了C++11引入的右值引用和移动语义,解释了为何函数返回值不能在C++11之前被直接引用,并通过不完美转发和完美转发的概念及其实现方法来阐述参数传递的优化。同时,通过实例展示了移动语义在不同容器如vector、list、deque、multiset和unordered_multiset中的性能提升,强调了移动语义对vector的显著影响。

目录

 

1.引入,观察string和complex的临时对象(右值)竟然可以被赋值

2.函数的返回值是个右值,C++11之前不能对其取引用

3.右值引用和移动语义

4.不完美转发与完美转发

4.1不完美转发的一个例子

4.2完美转发的底层实现

4.3实现完美转发的方法

5.写一个具有移动语义的类

6.对具有移动语义的类进行测试

6.0测试代码

6.1移动语义在vector中的表现

6.2移动语义在list中的表现

6.3移动语义在deque中的表现

6.4移动语义在multiset中的表现

6.5移动语义在unordered_multiset中的表现

6.6原因与结论


同学的链接1 

一个链接

1.引入,观察string和complex的临时对象(右值)竟然可以被赋值

a+b可以是右值,临时变量也可以是右值

2.函数的返回值是个右值,C++11之前不能对其取引用

3.右值引用和移动语义

4.不完美转发与完美转发

什么是完美转发(perfect forwarding)问题

4.1不完美转发的一个例子

4.2完美转发的底层实现

4.3实现完美转发的方法

5.写一个具有移动语义的类

str._data = NULL;// 本节图一种,防止重复释放,非常重要

6.对具有移动语义的类进行测试

【移动语义带来性能优化效果】阅读链接1

【深入理解C++11:C++新特性解析】第6章 提高性能及操作硬件的能力 测试代码整理

6.0测试代码

6.1移动语义在vector中的表现

这里的MCtor是七百多万次是因为发生了成长,可以拿着源码预先分配然后再测试一下.

6.2移动语义在list中的表现

6.3移动语义在deque中的表现

6.4移动语义在multiset中的表现

6.5移动语义在unordered_multiset中的表现

6.6原因与结论

 

移动语义其实对vector的影响最大,对其他容器几乎没有什么影响(deque不在两头插值的时候也会影响较大).

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值