我无法理解 RVO(和 NRVO)的定义,因为像这样的多个问题在我看来假设 RVO 省略了复制构造函数。现在根据 12.8.15
在这种情况下,实现将省略的复制操作的源和目标简单地视为引用同一对象的两种不同方式,并且该对象的销毁发生在两个对象本应被销毁的较晚时间优化。
看起来不是复制构造函数调用被省略,而是复制本身 - 只是对象首先在“复制”位置构造,因此没有“原始”对象,根本没有复制。因此,即使一个类有一个private
复制构造函数,它也可以在 RVO 启动时从函数中返回,因为没有复制。
我做对了吗?是复制本身省略还是复制构造函数调用省略?当对象类具有私有复制构造函数时,是否应允许从函数返回对象?