您的位置:首页 > 编程语言 > C语言/C++

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

2018-03-02 10:38 393 查看
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::fowardhttp://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<string> v;
string a = "123"; //或std::string &&a = "123";显示的标识a是全局字符串"123"的右值引用
cout<< "at first, std::string a is: " << a<<endl; //打印123

/*右值"123", 它的所有者将从原先的左值(变量std::string a), 转移到新的左值(std::vector v)
*所以, 使用std::move时一定保证, 以前的左值不再真需要了. 典型使用场合就是: (构造)函数的参数, 避免了再复制*/
v.push_back(std::move(a));
cout << "after std::move(a), now std::string a is: " << a; //打印空最后的glog将无法打印出a最开始的拷贝构造获取的值"123",因为全局字符串"123"的所有者,已经从最开始的变量a,转移到了v

C++ 11中的左值引用和右值引用https://www.cnblogs.com/sxmcACM/p/4498241.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: