C++对传参和传返回值时构造的优化处理
来源:互联网 发布:经传软件指标全集 编辑:程序博客网 时间:2024/04/30 15:41
C++对传参和传返回值时构造的优化处理
如果读者不太了解C++的四个默认成员函数,可以看这篇博客 enter link description here
有时候C++的编译器会对我们的代码进行优化处理,使我们很困惑。实际上,这些优化都是有迹可循的,不是杂乱无章的。
当多个临时对象连续赋值的时候 ,简单点来说就是,在一次拷贝构造结束后,并没有直接返回给要创建的对象而是又再次进行了拷贝构造。或者说是,建立一个临时对象,来进行拷贝构造,然后又返回了一个临时对象,再用这个返回的临时对象继续拷贝构造。这时候,系统就会自动优化。
例如:
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;class AA {}; AA f (AA a) { return a ; } void Test1 () { AA a1 ; a1 = f(a1); } void Test2 () { AA a1 ; AA a2 = f(a1); } void Test3 () { AA a1 ; AA a2 = f(f(a1)); }
Test 1
Test1 调用了两次次拷贝构造,一次赋值运算符的重载
Test 2
Test2调用了两次拷贝构造,0次赋值运算符的重载。
其实这个道理很简单,试想一下,谁想重复做不必要的工作,或者说,能一次做好的事情,为什么要做两次。编译器也是如此。
优化之前:
会用a拷贝构造出一个临时对象,然后用这个临时对象拷贝构造出a2
优化之后
直接用a拷贝构造出a2。
Test3 ( ) :
调用了三次拷贝构造,0次赋值运算符的重载。
省去了两个临时对象的创建。方框圈住的,都优化了,所以看起来调用了5次拷贝构造,实际上只调用了3次拷贝构造;
匿名对象的优化
阅读全文
0 0
- C++对传参和传返回值时构造的优化处理
- C++对传参和传返回值时构造的优化处理
- C++对传参合传返回值时构造的优化处理
- 关于C++对传参和传返回值时的优化处理
- 讨论构造拷贝构造的N中调用情况&&总结C++对传参合传返回值时构造的优化处理。
- C++构造函数传参与返回值时的优化
- 小结 | C++对传参和传返回值的优化
- 构造 和 拷贝构造 的优化处理
- C++传参构造的优化和讨论构造拷贝构造N中调用情况
- c++是如何处理 对象 作为返回值 和 输入参数的 -- 拷贝构造
- Scheme和Common Lisp中对函数作为变量和返回值的处理方法差异
- ionic对安卓返回和退出的处理
- 《函数调用时参数、返回值所做的优化处理+编译器NRV优化》
- C++对拷贝构造及默认成员函数的优化处理
- C++拷贝构造、移动构造与返回值优化
- java编译器对string常量表达式的处理和优化
- [Perl]对非标量函数返回值的处理
- java对远程接口方法的返回值处理
- 第三方实用控件 未完待续
- ecplise 选择工作空间启动出错(java9)
- 【大组会整理】深度生成模型可视化刘世霞深度生成网络可视化
- SylixOS线程创建的流程分析
- (全网最详细!)bzoj 2548 灭鼠行动 模拟 解题报告
- C++对传参和传返回值时构造的优化处理
- 艾伦人工智能研究所CEO Oren Etzioni:深度学习离人类水平的人工智能还差得很远
- Java-数据库
- 从 13 年开发史中,谷歌无人车之父预见自动驾驶的未来
- 冒泡排序的改进
- GMIS 2017大会杨洋演讲:认知分析-透过机器重新审视商业本质
- GMIS 2017 大会杨琼演讲:人工智能+医疗——噱头,还是未来?
- 线程的优先级
- 【NOI2015 Day2】荷马史诗 huffman tree结构运用