我正在阅读 Inside C ++对象模型这本书,我得到了以下内容:
据我所知,NRVO不会调用函数返回的类的复制构造函数。所以我不明白为什么"该程序的第一个版本不适用于NRV优化,因为没有复制构造函数......"。
答案 0 :(得分:0)
这个想法是代码既适用于执行优化的编译器,也适用于那些不执行优化的编译器。如果复制了对象,显然必须定义并访问复制构造函数。这就是要求,即使是那些可能并不总是使用它的编译器。
如评论中所述,C ++ 17将强制优化,然后可以放宽要求。