首页 > 编程语言 > 详细

c++11 右值引用 && std::move()

时间:2019-07-09 14:33:33      阅读:137      评论:0      收藏:0      [点我收藏+]

在学习c++的线程标准库的时候同时碰到了右值引用(&&)和c++11的move构造函数,

技术分享图片

简单的看了几篇博客,大概了解了左值、左值引用、右值、右值引用以及在左值明确放弃对其资源的所有权,通过std::move()来将其转为右值引用这五点内容:

 

以下链接都很简短,看两遍我相信就能有比较好的理解了:

浅析C++11右值引用和move语义

左值、左值引用、右值、右值引用

c++为什么用右值引用

 

一个std::move()的例程(参考:c++11 std::move() 的使用

#include <iostream>
#include <utility>
#include <vector>
#include <string>
int main()
{
    std::string str = "Hello";
    std::vector<std::string> v;
    //调用常规的拷贝构造函数,新建字符数组,拷贝数据
    v.push_back(str);
    std::cout << "After copy, str is \"" << str << "\"\n";
    //调用移动构造函数,掏空str,掏空后,最好不要使用str
    v.push_back(std::move(str));
    std::cout << "After move, str is \"" << str << "\"\n";
    std::cout << "The contents of the vector are \"" << v[0]
                                         << "\", \"" << v[1] << "\"\n";
}

技术分享图片

可以看到,std::move()就是将左值转换为对应的右值引用类型,且调用后销毁

c++11 右值引用 && std::move()

原文:https://www.cnblogs.com/exciting/p/11156900.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!