在函数中移动的参数的值引用传递。

问题描述 投票:0回答:1

如果你有一个函数参数要被移动到函数中的一个变量中,你会希望使用pass by reference而不是pass by value吗?

例如,使用这样的方法有什么好处吗?

void func(T &object2move)
{
  T obj{std::move(object2move)};
}

void func(T object2move)
{
  T obj{std::move(object2move)};
}

除上述情况外,是否只有当你想使用下面的代码时,你才会要 func 来接受一个r值?

void func(T object2move)
{
  T obj{object2move};
}

这些问题的答案是否取决于 T 是什么?

c++ move
1个回答
1
投票

如果你的函数一定会从给定的值中移动,那么最好的表达方式就是取一个rvalue-reference参数(T&&). 这样,如果用户试图直接传递一个l值,他们会得到一个编译错误。而这将迫使他们调用 std::move 直接在l值上,这 显而易见 向读者表明该值将被移动-from。

使用lvalue-reference总是错误的。Lvalue-reference并不绑定xvalues和prvalues(即:可以从它们那里移动的表达式),所以你用这样的接口是在撒谎。

© www.soinside.com 2019 - 2024. All rights reserved.