【发布时间】:2014-07-17 05:12:00
【问题描述】:
我有一些方法需要让他们能够通过 const 左值(它将被复制到哪里)和右值引用(用于速度)来获取变量
struct Object {
...
Object(Object&& o) { ... }
Object(const Object& o) { ... }
...
};
...
struct SomeClass {
...
Object arr[7];
void copy(int pos,const Object& o) { arr[pos] = o; }
void copy(int pos,Object&& o) { arr[pos] = o; }
...
};
因此,SomeClass 中的两个复制方法是完全一样的。唯一的区别是,在一个 Object 中作为 const 传递,它将被复制,而在另一个 Object 中,作为 rvalue 引用传递以供快速复制使用。
这两种方法的代码完全一致。
现在,在上面的示例中并没有那么悲惨,但是,我有一些更大的方法,9-15 行左右。显然,解决方法是像在此处一样复制它们,但感觉不对。
如何复用复制方法的代码?
【问题讨论】:
-
你可以在函数中按值和
std::move它。 -
嗯,Object 类使用右值引用构造函数来“窃取”o 对象的成员变量,并且让给定的对象一无所有。而 const Object 构造函数不能修改对象,也不能窃取它的变量,所以它必须复制。
-
@Praetorian 这是个好主意。如果在不复制任何内容的情况下找不到其他方法,我可能会使用它。
标签: c++ rvalue-reference lvalue