C++move函数详解
C++11的一个最重要特性就是支持移动语义,其中一个比较关键的函数就是std::move
那这个函数的作用是什么?
首先打开库文件 找到move的定义:
注意:不要把&&理解成引用的引用,这就是一个关键字
大概函数如下:
template<class T>
remove_reference_t<T>&& move(T && a) noexcept
{return static_cast<remove_reference_t<T>&&>(arg);
}
说白了这个函数的作用就是把传进来的参数强制转换成右值引用
可能有些人会有疑问,
为什么参数已经是右值引用了?
这就要说到参数推导了
比如以下例子:
template<typename T>
void foo(T&& params);
如果传进来的是一个左值
int a = 10;
foo(a);
此时params被推导为int&
如果传进来的是一个右值
foo(20);
此时paramas被推导为int&&
remove_reference的作用是什么?
就是去掉引用,比如int& 变成int int&&变成 int
也就是说std::move把你传进来的参数所有的引用都去掉,然后在加上&&,也就是变成右值引用
remove_reference是怎么实现的?
非常简单,首先看看定义:
可以看到有了三个模板匹配,不管你传的是什么,我都能去掉你的引用,通过::type得到你原始的类型
其中remove_referenct_t 无非是一个方便的写法
typename是为了说明 remove_reference是一个class
C++move函数详解相关推荐
- python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【FFmpeg】函数详解(三)
FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...
- 【FFmpeg】函数详解(二)
FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...
- 【FFmpeg】函数详解(一)
FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python基础知识~ 函数详解2
python~函数详解2 1 生成器函数 定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数 须知 yield和return一样,都可以返回数 ...
最新文章
- Linux(centOS)手动安装Apache+MySQL+PHP+Memcached+Nginx原创无错版
- 汇编调用c语言函数 call printf,如何在汇编调用c语言函数?
- Knockout js 绑定 radio 时,当绑定整形的时候,绑定不生效
- 区块链BaaS云服务(17)纸贵科技Z-BaaS“数据治理”
- 【二分查找万能模板,告别死循环、告别越界】Leecode 34. 在排序数组中查找元素的第一个和最后一个位置
- php匿名类的应用场景,【modernPHP专题(9)】匿名类
- tcp_tw_reuse、tcp_tw_recycle 使用场景及注意事项
- 【BOI2007】【BZOJ1176】Mokia
- jdk1.8 新特性(中英文)及中文版帮助文档
- mac 安装redis 视频教程
- 全国所有火车站(12306官方客运营业站站点)很全!!
- 关于离开,请诸位保重自己
- SVPWM的一些理解
- 太原市社会保险新数据中心建设及系统搬迁项目
- 牛客网前端刷题(三)
- JAVA程序设计:灯泡开关(LeetCode:319)
- Masonry的使用,动画,出现问题解决等
- 应用三菱GX Developer编程软件编写SFC顺序功能图的方法
- cmd命令下,使用java命令,运行指定目录下的*.class文件。
- 防守地图隐藏英雄密码全集