返回信息流这本书第二章里面提到一个nrv优化。大致就是对于返回对象的函数,通过nrv优化可以消除构造函数和析构函数的调用各一次。作者说如果想触发这个优化,类必须定义一个显式的复制构造函数。
但是编译器会自动合成隐式的复制构造函数,在执行nrv优化的时候应该总是有复制构造函数用的。为什么非要显式定义呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #71330同步于 2013/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
深入探索cpp对象模型书里的问题
amarantine
2013/5/29镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
这个优化不是标准里的,是编译器的实现。但是作者说这是一种普遍的实现。
其实这本书里基本说的都是标准之外的东西。。
【 在 huangzz 的大作中提到: 】
: 这个好像不符合C++标准吧?跟编译器有关系?
好吧,不符合标准的我一般都不看
优化效果依赖编译器的话一旦换个环境就坑了,还不如自己写更高效的代码
要是普遍实现的话,嗯,赶明我也看看吧
【 在 amarantine 的大作中提到: 】
: 这个优化不是标准里的,是编译器的实现。但是作者说这是一种普遍的实现。
: 其实这本书里基本说的都是标准之外的东西。。
我也这么觉得。要是对象用RAII方法管理资源,这种优化把构造函数和析构函数一省,不是乱套了吗。。
弱问一句,vptr神马的也不是标准,你看过吗?
【 在 huangzz 的大作中提到: 】
: 好吧,不符合标准的我一般都不看
: 优化效果依赖编译器的话一旦换个环境就坑了,还不如自己写更高效的代码
: 要是普遍实现的话,嗯,赶明我也看看吧
: ...................
我是这样想的:vptr是多态的基础,应该是标准里的,只是具体实现是由编译器决定,虽然换个环境实现方式不一样,但是不会影响程序的流程性能什么的,即是说不会有弊端。要是学一下的话,可以大大提高调试的水平,所以我觉得可以看看。
【 在 amarantine 的大作中提到: 】
: 我也这么觉得。要是对象用RAII方法管理资源,这种优化把构造函数和析构函数一省,不是乱套了吗。。
: 弱问一句,vptr神马的也不是标准,你看过吗?
挺有见地,赞一个!
【 在 huangzz 的大作中提到: 】
: 我是这样想的:vptr是多态的基础,应该是标准里的,只是具体实现是由编译器决定,虽然换个环境实现方式不一样,但是不会影响程序的流程性能什么的,即是说不会有弊端。要是学一下的话,可以大大提高调试的水平,所以我觉得可以看看。
: