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

来源:互联网 发布:java从入门到精通4pdf 编辑:程序博客网 时间:2024/05/22 20:28

   

返回值的主要目的就是为了消除由于调用copy   constructor而导致的开销。

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

所以,你可以把“自己定义copy   constructor”当成打开编译器返回值优化功能的“开关”。 

原创粉丝点击