C++ 11 之 移动语义 左右值引用 完美转发

 

Summary

C++ 11 的 移动语义,左值引用 ,完美转发 三部分相互关联。阅读 两本数的相关章节即可完全掌握。

 

首先是,强烈推荐IBM XL编译器开发团队推出的《深入理解C++11》3.3章节,内容讲解到为,鞭辟入里,自成系统,开发编译器的人果然对语言的理解很到位。

 

其次是,《Effective Mocern C++》by Scott Meyers , 相关章节, 但是先比第一本,个人感觉该书的该部分讲解略显繁琐,更为细节,如果有大量时间可以考虑看看。https://blog.csdn.net/qq_35865125/article/details/103838944


关于类型推断

https://www.cnblogs.com/qicosmos/p/3369940.html

 

C++11引入完美转发

“c++中,有这种情况:同一个函数名字,函数的参数数量和类型不确定,解决的方法有以下几种形式:
最初的方法是使用重载函数,把所有相关的参数数量和类型都实现一遍,这是最简单最暴力的解决方法,但是这样的代码一个是不优雅,另外一个是大量的逻辑重复的代码。
然后,进一步的方法是使用模板函数,这样可以大大降低函数数量,但是这里有一个问题,就是如何保证参数类型(左值、右值)的完全一致。这在c++11以前是一个痛点。最后就是c++11引入了完美转发(std::forward),完美的解决了这个问题。”

 

C++ STL容器的emplace_back函数

c++11中大部分容器都加了一个emplace_back成员函数。

在STL中,进行插入元素的时候,有insert和push两种选择方式,而在有了右值引用和移动语义的时候,就提出了更高效的插入方法:emplace_back.

vector中它的定义是这样的:

template< class... Args >
void emplace_back( Args&&... args );

Args&&是一个未定的引用类型,因此它可以接收左值引用和右值引用,它的内部也是调用了std::forward实现完美转发的。因此如果我们需要往容器中添加右值、临时变量时,用emplace_back可以提高性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

First Snowflakes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值