将输入参数作为右值引用传递?

Iiz*_*uki 1 c++ rvalue-reference pass-by-rvalue-reference

将参数作为右值引用传递只是为了清楚表明您将要操作参数是个好主意吗?有点像 const 正确性的反面。

例如,这个函数接受一个字符串向量,以某种方式对其进行操作并返回一个布尔值:

static bool isThisSomething(std::vector<string>&& input1);
Run Code Online (Sandbox Code Playgroud)

现在如果调用者想用左值调用这个函数,他必须使用std::move()并承认这个向量会被弄乱。这应该可以防止意外的副作用。

std::vector<std::string> lvalueVector = {"foo", "bar"};
bool somethingness = isThisSomething(std::move(lvalueVector)); 
Run Code Online (Sandbox Code Playgroud)

澄清:
这样isThisSomething做的操作只是一些内部逻辑的一部分,对于调用者来说似乎是无稽之谈。

eer*_*ika 5

将参数作为右值引用传递只是为了清楚表明您将要操作参数是个好主意吗?

一般不会。特别是,这取决于您如何操纵论点。

如果您通过右值接受参数,那么您暗示该参数将处于未指定的状态,通常是移动状态。如果这就是函数所做的,那么右值引用确实是合适的。请注意,根据用例,在这种情况下,按值传递参数通常是一个不错的选择。

这与您在修改对象时想要做出的相反含义是,调用者可能会发现修改后的状态很有用。对非常量的左值引用意味着参数将以这种方式进行操作。

  • @Iizuki如果您希望能够通过移动传递右值,或通过复制传递左值,那么传递值可以实现两者。右值参数仅适用于前者。 (2认同)