在哪里使用右值作为函数参数?

Where to use an rvalue as a function parameter?

我知道关于这个论点有很多问题,但我仍然不了解右值的一些基本知识。

假设我有这样一个函数:

/* 1 */ void func( std::string s ) { /* do something with s */ }

我是这样使用的:

int main()
{
  func( "a string" );
}

在这种情况下,我将此字符串传递给函数 func 始终以这种方式定义此类函数不会更好:

/* 2 */ void func( std::string&& s ) { /* do something with s */ }

我的问题是:在这种情况下,使用 /* 2 */ 而不是 /* 1 */ 不是总是更好吗?如果不是,为什么以及在哪里我应该使用其中一个或另一个?事实是,如果我理解得很好,在 /* 2 */ 中参数被移动并且永远不会在函数范围之外使用,对吗?

在调用时创建临时字符串的特定示例中,两个表达式是等效的。

事实上,您不能保留两者并使用重载决策,因为它们捕获相同类型的对象(同样,仅在您的示例中)。它们都可以捕获临时字符串并在参数 s.

中提供它