话说如果一个class没有提供copyconstructor,就不会实施NRV优化,这是为什么,因为编译器需要的话,可以合成一个copyconstructor啊求大神解答,谢谢。
2 回答
一只甜甜圈
TA贡献1836条经验 获得超5个赞
题目的这句话应该是从深度探索C++对象模型中看来的吧,其实NRV优化和有没有copyconstructor并没有直接的联系。“早期的cfront需要一个开关来决定是否应该对代码实行NRV优化,这就是是否有客户(程序员)显式提供的拷贝构造函数:如果客户没有显示提供拷贝构造函数,那么cfront认为客户对默认的逐位拷贝语义很满意,由于逐位拷贝本身就是很高效的,没必要再对其实施NRV优化;但如果客户显式提供了拷贝构造函数,这说明客户由于某些原因(例如需要深拷贝等)摆脱了高效的逐位拷贝语义,其拷贝动作开销将增大,所以将应对其实施NRV优化,其结果就是去掉并不必要的拷贝函数调用。”参看上面的那段话,当然我也是从其他地方摘过来的,由于Lippman写这本书的时候比较早,并且他是cfront的早起作者之一,所以就想当然的把这句话当做准则写进书里面了。
添加回答
举报
0/150
提交
取消
