作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个函数
class A { <has copy and move constructors > };
void f(A &&a) { ... }
我想用变量 x
调用函数 f,但我想在 x
的拷贝上运行 f
,而不是 x
本身。为什么我不能做这样的事情?
f(copy(x));
而是必须做
f(A(x));
有没有类似我上面描述的copy
函数的?
注意:请不要告诉我添加执行复制的重载 f
,我想要一些不需要重载并且是显式的(即 copy
让读者清楚这里是复制)
最佳答案
这个呢?
template <typename T>
T copy(T t) {return t;}
当您按值传递 t
并发生后续 move 时,复制完成。
http://coliru.stacked-crooked.com/a/cbc1a161f65a022b
如果你可以修改你的函数:
void func(A) {}
那么你可以做
int main() {
A a;
func(a); //copies
func(std::move(a)); //moves
return 0;
}
没有任何额外的构造函数调用。
关于C++11:显式复制值以用作右值引用的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992960/
我是一名优秀的程序员,十分优秀!