拷贝构造函数与NRV优化

《深度探索C++对象模型》第二章67页有: 
这个程序的第一个版本不能实施NRV优化,因为test class 缺少一个copy constructor. 
也就是缺少拷贝构造函数所以不能NRV优化。

NRV优化和拷贝构造函数是有关系的,只有定义了拷贝构造函数才会开启NRV优化,但现代编译器NRV优化的开启一般都与拷贝构造函数没有关系,

早期的 cfront需要一个开关来决定是否应该对代码实行NRV优化,这就是是否有客户(程序员)显式提供的拷贝构造函数:如果客户没有显式地提供拷贝构造函数,那么cfront认为客户对默认的逐位拷贝语义很满意,由于逐位拷贝本身就是很高效的,所有没必要再对其实施NRV优化;但如果客户显式提供了拷贝构造函数,这说明客户由于某些原因(例如需要深拷贝等)摆脱了高效的逐位拷贝语义,其拷贝动作开销将增大,所以将应对其实施NRV 优化,其结果就是去掉并不必要的拷贝函数调用。

NRV优化会导致原本预想中的调用“拷贝构造函数”变成调用别的“构造函数”, 
一旦这个时候,拷贝构造函数和别的构造函数提供的功能不同,就可能会出问题。

参考: 
https://www.cnblogs.com/cyttina/archive/2012/11/26/2790076.html 
https://book.douban.com/annotation/19292671/
--------------------- 
作者:uestc_chenmo 
来源:CSDN 
原文:https://blog.csdn.net/uestc_chenmo/article/details/80342719 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值