编译器的返回值优化
来源:互联网 发布:添加网络hp打印机步骤 编辑:程序博客网 时间:2024/05/21 17:23
如果函数返回值是一个对象,要考虑 return 语句的效率。例如
return String(s1 + s2);
这是临时对象的语法,表示“创建一个临时对象并返回它” 。不要以为它与“先创建一个局部对象 temp 并返回它的结果”是等价的,如
String temp(s1 + s2);
return temp;
实质不然,上述代码将发生三件事。首先,temp 对象被创建,同时完成初始化;然后拷贝构造函数把 temp 拷贝到保存返回值的外部存储单元中;最后,temp 在函数结束时被销毁(调用析构函数) 。然而“创建一个临时对象并返回它”的过程是不同的,编译器直接把临时对象创建并初始化在外部存储单元中,省去了拷贝和析构的化费,提高了效率。
以上内容转自: http://blog.csdn.net/believefym/article/details/1854268
接下来以实验验证上述结论。相关代码为:
/* Name:test.cpp * Author:btwsmile * Create Time:2011-08-12 * Goal: 验证return效率 */#include<iostream>#include<ctime>#include<string>using namespace std;const long repeater=1000000L;string retStrV1();string retStrV2();void main(){clock_t start,finish;start=clock();for(int i=0;i<repeater;i++)retStrV1();finish=clock();cout<<"Within temp, CLOCK TICKS:"<<finish-start<<endl;start=clock();for(int i=0;i<repeater;i++)retStrV2();finish=clock();cout<<"Without temp,CLOCK TICKS:"<<finish-start<<endl;system("pause");}string retStrV1(){string s1="test";string s2="return";string s3="efficience";string temp=s1+s2+s3;//版本1比版本2增加了temp变量return temp;}string retStrV2(){string s1="test";string s2="return";string s3="efficience";return s1+s2+s3;}
运行结果:
执行时间上有较大差别,可以验证上述结论。
- 编译器的返回值优化
- RVO-编译器返回值优化
- C++编译器优化-返回值优化
- 《函数调用时参数、返回值所做的优化处理+编译器NRV优化》
- C++中临时对象及编译器对返回值优化的手段
- 使用std::move()提醒编译器对返回值进行优化
- C++以对象作为返回值时编译器的优化,以及临时变量的析构时机
- 眼见为实 编译器的优化
- 编译器的优化问题
- 优化编译器的发展
- 编译器的优化
- 编译器的NRV优化
- 编译器的优化问题
- 编译器的三级优化
- 编译器的三级优化
- 编译器的三级优化
- C++的返回值优化
- 基于intel编译器的优化
- dedecms织梦暴最新严重0day漏洞
- Girls and Boys
- STL sort排序方法详解
- 一些重要的算法
- 手把手教你TestComplete_对象的等待问题
- 编译器的返回值优化
- UVALive 4976 Defense Lines
- menu
- 单位的编程平台是linux+gcc,为了适应这个潮流,我只能开始了漫长的linux学习之旅!
- 诺基亚手机有多少个系列?
- char *a 和char a[] 的区别(指针和数组的区别)
- ewebeditor PHP 3.8版本上传任意文件0day
- 2011-8-12 17:23:21
- ZOJ1082 POJ1125 Stockbroker Grapevine,Dijkstra 算法