c++ 11中emplace_back替代push_back的相关知识点,含右值引用,move用法等

C++11引入了右值引用,转移构造函数,push_back()右值时就会调用构造函数和转移构造函数(原来是调用拷贝构造,会为临时变量申请堆空间,影响程序效率,C++11以后为右值引用调用转移构造函数,不会为临时变量申请堆空间,而是直接赋值,提高程序效率)。

使用mplace_back替代push_back()可以在这上面有进一步优化空间,只调用构造函数不需要调用右值引用转移构造函数。
如:
reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936)); //有类的创建
elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建

一、主要知识点
C++ 11 左值,右值,左值引用,右值引用,std::move, std::foward
http://blog.csdn.net/xiaolewennofollow/article/details/52559306

emplace_back() 和 push_back 的区别
http://blog.csdn.net/xiaolewennofollow/article/details/52559364



二、其他相关知识点:

C++11中std::move的使用
https://www.cnblogs.com/zhangdongsheng/p/7664228.html

	vector v;
	string a = "123";	//或std::string &&a = "123";显示的标识a是全局字符串"123"的右值引用
	cout<< "at first, std::string a is: " << a<
最后的glog将无法打印出a最开始的拷贝构造获取的值"123",因为全局字符串"123"的所有者,已经从最开始的变量a,转移到了v

C++ 11中的左值引用和右值引用
https://www.cnblogs.com/sxmcACM/p/4498241.html



你可能感兴趣的:(c++ 11中emplace_back替代push_back的相关知识点,含右值引用,move用法等)