std::move的实际工作过程
std::move的定义如下:
1 template <typename T> 2 typename remove_reference<T>::type && move(T&& t) 3 { 4 return static_cast<typename remove_reference<T>::type&&>(t); 5 }
- 函数模板推断出T的类型为string
- 因此,remove_reference用string进行实例化
- remove_reference<string>的 type成员是string
- move的返回类型是string&&move的函数参数t的类型是string&&
因此等价于:
函数体返回static_cast<string&&>(t),由于t的类型已经是右值引用,因此无需进行任何转化。
2)针对std::move(s1); 传入的就是一个左值
- 函数模板推断出T的类型是string&(因为string& &&才能折叠为string&)
- 因此,remove_reference用string&进行实例化
- remove_reference<string>的 type成员是string
- move的返回类型是string&&
- move的函数参数t的类型是string& &&,会折叠为string&
因此等价于:
string&& move(string& t);
函数体返回static_cast<string&&>(t),这里t的类型是string&,通过static_cast将其转化为string&&
std::move的实际工作过程相关推荐
- C++核心准则ES.56:只在需要将一个对象显式移动到另外的作用域时使用std::move
ES.56: Write std::move() only when you need to explicitly move an object to another scope ES.56:只在需要 ...
- C++11:右值引用、移动构造、std::move, 以及使用emplace_back代替push_back
最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 1.右值 ...
- std::move C++11 标准新特性: 右值引用与转移语义
新特性的目的 右值引用 (Rvalue Referene) 是 C++ 新标准 (C++11, 11 代表 2011 年 ) 中引入的新特性 , 它实现了转移语义 (Move Sementics) 和 ...
- C++11 std::shared_ptr的std::move()移动语义底层分析
std::shared_ptr的std::move()移动语义底层分析 执行std::move()之前: 执行std::move()之后: 结论:一个浅拷贝 sizeof(std::shared_pt ...
- std::move()源码分析
https://segmentfault.com/a/1190000020744971?utm_source=tag-newest C++11 引入右值和移动语义,其中std::move()是不可或缺 ...
- 什么是std :: move(),什么时候应该使用?
它是什么? 它有什么作用? 什么时候应该使用? 赞赏良好的链接. #1楼 当您需要在其他地方"传输"对象的内容时,可以使用move,而无需复制(即内容不重复,这就是为什么它可以用于 ...
- C++ std::move/std::forward/完美转发
右值引用相关的几个函数:std::move, std::forward 和 成员的 emplace_back; 通过这些函数我们可以避免不必要的拷贝,提高程序性能. move 是将 对象的状态 或者 ...
- push_back、emplace_back、std::move
1.push_back和emplace_back的区别 emplace_back() 和 push_back() 的区别: 就在于底层实现的机制不同.push_back() 向容器尾部添加元素时,首先 ...
- std::move的理解和使用
最初接触到std::move,以为std::move具有类似于swap的功能,可以避免内存的拷贝.后来查看资料发现,std::move的实现并没有交换内存的操作. 那么std::move是如何避免内存 ...
最新文章
- QIIME 2教程. 27语义类型Semantic(2021.2)
- 【问题收集·中级】关于XMPP使用Base传送图片
- WPF Calendar 日历控件 样式自定义
- ST表(模板)「 查询区间最值 」
- 几行代码,网盘链接提头来见!
- 为什么C4C UI上看不到新建按钮
- LaTeX中巨算符下面输入两行内容的方法
- [Bzoj1911][Apio2010]特别行动队(斜率优化)
- Facebook股价周四大涨15.5% 市值超亚马逊
- 关于在GridControl中添加GridLookUpEdit绑定数据
- 简易可行Live2D直播应用路线分享
- 【Java SE】static成员及代码块
- Adobe FLASH CS6 安装错误解决方法
- java 换行分割_java – 如何通过换行分割字符串?
- 节奏旋律音乐制作软件-Native Instruments Maschine 2 v2.14.1 WiN
- 使用mono构建c#脚本运行环境
- 纯前端提示页面版本更新
- 广东省人力资源和社会保险个人资料下载
- 尼古拉·特斯拉,到底有多神?
- HTML微博浮动代码,jQuery实现仿新浪微博浮动的消息提示框(可智能定位)