假设通常即使获得参考也需要对象的副本。假定这些签名在类范围内,以便可以看到它们。与仅执行一次push(const RingType&aData)相比,这样做的利弊是什么?如果我的对象(RingType)仅具有原始类型或原始类型,则该模式可能不会给我带来任何好处,但是在那种情况下会损害性能吗?我觉得这种模式很好,因为如果获得引用,则将其复制并作为右值转发,如果获得右值,它将转到右值签名。有什么想法吗?我在这里的重点是性能。

void push(const RingType& aData) {
  push(RingType(aData));
}

void push(RingType&& aData) {
//process aData
}

最佳答案

它不是很有用:


如果不需要副本,请通过引用传递
如果您需要副本,请按值传递


在后一种情况下,将根据其可用性调用复制构造函数或move构造函数,以实现最佳性能。

10-08 11:56