文档章节

C++ 11 的 move 构造函数和右值引用

大头s
 大头s
发布于 2017/04/05 17:30
字数 415
阅读 47
收藏 0

    刚刚弄懂了C++的move构造函数的概念。原博客地址如下:

       http://blog.csdn.net/liyongofdm/article/details/7667942

    简单总结一下:

    如果粗糙理解话,能放置在赋值号(=)左边的变量,叫左值,否则叫右值(只能放在右边)。

    当然这样理解是不准确的。事实上,常量除了初始化外也不能放在左边,但不一定是右值。真正右值可以按如下方法区分:

    被命名的量就是左值,匿名的量是右值。请看下面这些:

int a = 0;  // a是左值,0是右值
int b = a;  // a和b都是左值
const int c = a;  // a和c都是左值
int d = int(a);  // 这里出现了3个值,其中a和d都是左值,而int(a)是右值

int add(const int&n1, const int&n2){
    return n1 + n2;  // 这里return了一个右值
}

int e = add(a+b, c);  // 两个参数,第一个传入了一个右值,第二个则传入了左值

    由此看来,右值就是那些临时构造的对象或常量,它们产生之后,通常在用完后就失去了可用性。这样一来,如果反复构造一些临时对象,就会造成很多不必要的性能开销,而move构造函数就是由此而来。顾名思义,move构造函数就是“移动”而非拷贝,是为了将临时对象的一些内容直接“借”过来而不是拷贝,这样可以大大提高效率,并且不用再担心因为语句细节过于繁杂导致性能降低的问题。

© 著作权归作者所有

大头s
粉丝 1
博文 1
码字总数 415
作品 0
北京
前端工程师
私信 提问
C++:一段代码,了解拷贝构造函数、move构造函数、拷贝赋值函数、move赋值函数、右值引用

本文纯粹是个整理。 以下代码和图片来自C++ 11右值引用。 其他: 什么是左值、右值: C++左值与右值之道 C++左值与右值之间共同与不同点解析 C/C++左值性精髓(一) 左值的前世今生 C/C++左值...

樂天
2015/06/25
976
0
C++11 中值得关注的几大变化(详解)

源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变...

红薯
2011/08/19
3.3K
14
C++11 中值得关注的几大变化

源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以,我就不翻译了,我在这里仅对文中提到的这些变...

雅各宾
2014/01/17
108
0
C++11 中值得关注的几大变化(详解)

转自:http://coolshell.cn/articles/5265.html 源文章来自前C++标准委员会的 Danny Kalev 的 The Biggest Changes in C++11 (and Why You Should Care),赖勇浩做了一个中文翻译在这里。所以...

长平狐
2013/01/11
193
0
C++ 0x 之左值与右值、右值引用、移动语义、传导模板

左值与右值 左值与右值的概念要追溯到 C 语言,由 C++ 语言继承了上来。C++ 03 3.10/1 如是说:“Every expression is either an lvalue or an rvalue.”左值与右值是指表达式的属性,而非对...

雅各宾
2013/11/27
227
2

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
今天
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
13
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
9
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
87
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部