您的位置:首页 > 运维架构

为什么返回值优化需要显示的提供一个子copy constructor,,,但是又不调用它呢?

2007-11-14 11:43 309 查看
返回值的主要目的就是为了消除由于调用copy constructor而导致的开销。

如果你没有显示提供copy constructor,那么编译器就会为你自动合成一个,但是编译器很可能会认为自己合成的这个copy constructor是trivial的(也就是几乎什么都不做),也就是说调用这个自己合成的copy constructor并没有什么额外的性能开销,所以此时编译器不会执行返回值优化。但是如果你显示提供了一个copy construtor,那么编译器就认为这个copy constructor肯定会做一些实际的事情(可能实际上你也没做什么),进而会导致一定的开销,所以它会打开返回值优化的功能,将临时对象优化掉。

所以,你可以把“自己定义copy constructor”当成打开编译器返回值优化功能的“开关”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐