1

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

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

static bool isThisSomething(std::vector<string>&& input1);

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

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

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

4

1 回答 1

5

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

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

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

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

于 2020-06-29T12:17:59.893 回答