社区
C++ 语言
帖子详情
什么时候使用std::move
木易云清
2015-05-25 07:01:50
自从c++11出了std::move后都不会使用引用了,不知道什么时候使用引用,什么时候使用std::move,大家说说std::move的使用场景。std::move不就是不用复制嘛,引用也是耶。有点迷糊了。
...全文
360
1
打赏
收藏
什么时候使用std::move
自从c++11出了std::move后都不会使用引用了,不知道什么时候使用引用,什么时候使用std::move,大家说说std::move的使用场景。std::move不就是不用复制嘛,引用也是耶。有点迷糊了。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
taodm
2015-05-25
打赏
举报
回复
汗,你彻底忘了std::move就行了。 先把C++98学会再说。
c++ 之
std
::move 原理实现与用法总结
在C++11中,标准库在<utility>中提供了一个有用的函数
std
::move,
std
::move并不能移动任何东西,它唯一的功能是将一个左值强制转化为右值引用,继而可以通过右值引用
使用
该值,以用于移动语义。从实现上讲,
std
::move基本等同于一个类型转换:static_cast<T&&>(lvalue);
std
::move函数可以以非常简单的方...
什么时候用
std
::move()?
在第一个版本中,您读写 3*n 个元素,在第二个版本中,您基本上只读写指向向量缓冲区的 3 个指针,加上 3 个缓冲区的大小。” 好吧,如果您正在编写应用程序代码,您可能不会对编译器创建的临时对象进行大量处理。典型的用途是将资源从一个对象“移动”到另一个对象而不是复制。下面是一个简单明了的简短示例:用更少的复制交换两个对象。换句话说,当您
使用
std
::move(x) 时,您允许编译器蚕食 x。你可以掠夺我,移动我持有的任何东西并在别处
使用
它(因为我很快就会被摧毁)”。之后,编译器可以让另一个对象拥有它。
现代C++技术研究(7)---
std
::move的
使用
场景
使用
std
::move就是为了把入参强转为右值,通常这样做是为了触发移动构造函数的调用,大部分场景都是OK的,但是,如果入参是常量,不要加
std
::move,因为加了也不会调用移动构造函数;如果入参是临时对象,也不要加
std
::move,因为不加也会调用移动构造函数。这个也容易理解,移动构造函数可能会修改入参,因为定义为常量,不能修改,所以不能调用移动构造函数,但是拷贝构造函数的入参是可以接受常量的。支持移动语义,是现代C++的主要语言特性之一,
std
::move本质上就是把一个变量强转成右值引用。
到底何时
使用
std
::move
std
::move的
使用
场景
理解
std
::move和
std
::forward
首先通过了解它们(指
std
::move和
std
::forward)不做什么来认识
std
::move和
std
::forward是非常 有用的。
std
::move不move任何东西。
std
::forward也不转发任何东西。在运行时,他们什么 都不做。不产生可执行代码。
std
::move和
std
::forward只是执行转换的函数(确切的说应该是函数模板)。
std
::move无条件的 将它的参数转换成一个右值,而
std
::forward当特定的条件满足时,才会执行它的转换。这就 是它们本来的样子.这样的解
C++ 语言
65,199
社区成员
250,520
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章