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可以提高性能。