编译器层NRV优化(Named Return Value)

原代码为:

 class testObj{friend testObj foo(double);public:testObj(){memset(array, 0, 10000 * sizeof(double));}public:double array[10000];inline testObj(const testObj &t)//优化代码{memcpy(this, &t, sizeof(testObj));}};testObj foo(double val){testObj local;local.array[0] = val;local.array[99] = val;return local;} void test(){time_t  timeVal;time(&timeVal);struct tm tVal;localtime_s(&tVal, &timeVal);cout << tVal.tm_hour << ":" << tVal.tm_min << ":" << tVal.tm_sec << endl; //start timefor (int i = 0; i < 10000000; i++){testObj t = foo(double(i));} time_t timeNow;time(&timeNow); struct tm tValNow;localtime_s(&tValNow, &timeNow);cout << tValNow.tm_hour << ":" << tValNow.tm_min << ":" << tValNow.tm_sec << endl; //end time }

Visual Studio 2017 编译结果 Debug模式
.禁用优化(点开项目“属性页”,配置属性/“C/C++”/优化 )

输出结果为55s
11:19:40
11:20:35

.打开优化

(“优化"改为“最大优化/O1”,与"优化"同级,点击"代码生成” ,"基本运行时检查"改为“默认值”,若是RTC1则与之前得优化冲突)
输出结果为18s
13:23:10
13:23:28

【引用】
[1]<<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2] 代码地址 https://github.com/thefistlei/cplusStudy.git

深度探索C++ 对象模型(4)-Default Copy Constructor(4)相关推荐

  1. 深度探索C++ 对象模型(4)-Default Copy Constructor(2)

    没有Default Constructor, class Myclass{ public://... private:int a;char *str; }; 编译器执行的是"位逐次拷贝(Bi ...

  2. 深度探索C++ 对象模型(4)-Default Copy Constructor(3)

    程序转化语意学 1. 显式初始化 原代码为: X x0; void foo_bar() { X x1(x0);X x2 = x0; X x3 = X(x0);} 编译器将产生拷贝构造函数,调用拷贝构造 ...

  3. 深度探索C++ 对象模型(4)-Default Copy Constructor(1)

    3种地方出现: 1.明确的调用拷贝构造函数 class X { }; X tmp; X xx=tmp; 2.作为参数时,对临时变量调用拷贝构造函数 void foo(X x); { }; X xx; ...

  4. 深度探索C++ 对象模型(3)-默认构造函数Default Constructor

    1. Default Constructor只对base class subobjects和member class objects初始化,对data member不做操作 2. 编译器构造Defau ...

  5. 深度探索C++ 对象模型(3)-默认构造函数Default Constructor续

    (1)带有虚函数的类 class Widget { public: virtual int flip() = 0;//..}; void flip(const Widget* widget ) { w ...

  6. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书 ...

  7. 深度探索C++对象模型第2章 构造函数语义学

    默认构造函数 两个误区: 1 任何class如果没有定义默认构造函数,就会被合成一个出来:只有在某些情况下被合成 2 编译器合成出来的默认构造函数会明确设定class中每一个数据成员的默认值 :默认值 ...

  8. 第2章构造函数语义学读书笔记——深度探索c++对象模型

    深度探索c++对象模型 第2章 构造函数语义学 2.1 Default Constructor的构建操作 2.2 Copy Constructor的构造操作 2.3 程序转化语义学 2.4 成员的初始 ...

  9. 《深度探索C++对象模型》读书笔记第五章:构造析构拷贝语意学

    <深度探索C++对象模型>读书笔记第五章:构造析构拷贝语意学 对于abstract base class(抽象基类),class中的data member应该被初始化,并且只在constr ...

最新文章

  1. 联想电脑 Realtek RTL8821CE 无线网卡 驱动安装 16.04/18.04
  2. 设计模式之适配器模式(Adapter)摘录
  3. postgresql在线备份与恢复(三)
  4. poj 1699 Best Sequence (搜索技巧 剪枝 dfs)
  5. 日志为什么不入数据库
  6. 货郎问题:回溯法和限界分支法
  7. 什么时候用#{},什么时候用${}?
  8. 升级 ubuntu_重要:Canonical 安全更新,请相关 Ubuntu 版本赶紧升级
  9. python怎么用matplotlib_用Matplotlib在Python中绘制时间
  10. 动态规划(二)——经典问题之最长上升子序列
  11. 敏捷 - #1 原则:早期和持续交付有价值的软件 (#1 Agile Principle)
  12. onu光功率多少是正常_ONU、机顶盒、路由器常见网络问题及处理方法
  13. Python海龟turtle画图常见画图代码大全
  14. matlab GUI画图实例——手动输入函数画图
  15. Tableau画图初学者~新手教程~常见类型图
  16. 老人步履蹒跚,警惕骨关节炎
  17. 用Python实现温度转换程序
  18. python公开直播课_今晚Python与人工智能直播课来袭,Mars喊你快上车
  19. 5.3 项目:超级秒表
  20. LSF集群作业管理系统

热门文章

  1. Java 洛谷 P1028 数的计算
  2. java list addall源码_Java集合:ArrayList源码分析
  3. python为什么不能自动语法_Python 为什么不支持 i++ 自增语法,不提供 ++ 操作符?...
  4. 关于对2020年数据中心的发展的8个预测
  5. java https 慢_jetty https慢怎么调优?
  6. mro python_用python实现MRO算法
  7. 成功解决OSError: [Errno 28] No space left on device
  8. Python之pandas:pandas.set_option函数的参数详细解释
  9. AI:2020年6月21日北京智源大会演讲分享之20:05-20:25陶建华《人工智能学科设置与人才培养》、雷明《企业对人工智能人才的要求以及对人工智能人才培养的建议》
  10. ML之DT之CART:分类与回归树CART算法的简介、应用、经典案例之详细攻略