为什么返回值优化需要显示的提供一个子copy constructor,,,但是又不调用它呢?
2007-11-14 11:43
309 查看
返回值的主要目的就是为了消除由于调用copy constructor而导致的开销。
如果你没有显示提供copy constructor,那么编译器就会为你自动合成一个,但是编译器很可能会认为自己合成的这个copy constructor是trivial的(也就是几乎什么都不做),也就是说调用这个自己合成的copy constructor并没有什么额外的性能开销,所以此时编译器不会执行返回值优化。但是如果你显示提供了一个copy construtor,那么编译器就认为这个copy constructor肯定会做一些实际的事情(可能实际上你也没做什么),进而会导致一定的开销,所以它会打开返回值优化的功能,将临时对象优化掉。
所以,你可以把“自己定义copy constructor”当成打开编译器返回值优化功能的“开关”。
如果你没有显示提供copy constructor,那么编译器就会为你自动合成一个,但是编译器很可能会认为自己合成的这个copy constructor是trivial的(也就是几乎什么都不做),也就是说调用这个自己合成的copy constructor并没有什么额外的性能开销,所以此时编译器不会执行返回值优化。但是如果你显示提供了一个copy construtor,那么编译器就认为这个copy constructor肯定会做一些实际的事情(可能实际上你也没做什么),进而会导致一定的开销,所以它会打开返回值优化的功能,将临时对象优化掉。
所以,你可以把“自己定义copy constructor”当成打开编译器返回值优化功能的“开关”。
相关文章推荐
- C#: 调用存储过程或函数显示"需要"参数,但未提供该参数的解决方法
- 关于自定义异常中为什么带参构造器需要显示调用父类异常的带参构造器
- 为什么需要在TypedArray后调用recycle
- 在Oracle12c上添加了Scott用户,但是为什么再次进入的时候却显示invalid username/password;logon denied
- 为什么安装sql server2000时出现提示先前有安装的文件挂起,需要重新启动计算机,但是重起还是不行
- 为什么Arduino UNO工作电压是5V,但是需要9V的电源适配器
- 通讯录的录入与显示(从相似度0.98到后来成功,但是不知道为什么,后来知道错在了生日01月的表示方法上了)
- 为什么用java的URL定位资源图片需要刷新界面才能显示
- 使用JMeter往Mysql中插入数据,数据时成功插入了,但是JDBC请求为什么显示的是报错状态
- Android UI画面显示问题需要给mtk提供的相关资讯?
- 定义了Shape,但是在LinearLayout中却显示不出来为什么啊?
- 当没有数据时,girdview不显示任何东西,但是需要显示列名.
- 有时候事件判断时需要弹吐司,但是当你连续点击时,吐司会长时间显示,久久不肯离去
- Atitit 为什么互联网金融会得到高层的支持 ----面子工程战略 政绩战略 大事业战略 高层需要在意识形态创新全球,政绩工程 得到合法性。 银行有很多家,而且别的区域也有。。不独特。。但是支付
- 我在android上面调用PKCS7Padding 是没有问题的,但是在java写的服务端就有问题了。不知道为什么,我用的jdk都是1.8.0的jdk。
- 为什么需要在TypedArray后调用recycle
- 当定义基类和子类拷贝构造函数时,需要显示调用基类的拷贝构造函数才行
- android onNewIntent 为什么要在onNewIntent的时候要显示的去调用setIntent
- 指针方面的问题,此程序调试显示是正确的,但是运行起来的结果是错误的为什么?求解
- 为什么TCP服务端需要调用bind函数而客户端通常不需要呢?