gpt4 book ai didi

C++11:显式复制值以用作右值引用的最短方法

转载 作者:太空狗 更新时间:2023-10-29 20:03:28 25 4
gpt4 key购买 nike

我有一个函数

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;
}

没有任何额外的构造函数调用。

http://coliru.stacked-crooked.com/a/1bc80bcce64f242f

关于C++11:显式复制值以用作右值引用的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28992960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com