提问者:小点点

是否将输入参数作为rvalue引用传递?


将参数作为rvalue引用传递,只是为了清楚地表明您要操作参数,这是一个好主意吗? 有点像常量正确性的反面。

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

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

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

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

说明:
IsthisSomething所做的操作只是某些内部逻辑的一部分,对于调用方来说似乎是无稽之谈。


共1个答案

匿名用户

将参数作为rvalue引用传递,只是为了清楚地表明您要操作参数,这是一个好主意吗?

一般不是。 尤其是,这取决于你是如何操纵论点的。

如果通过rvalue接受参数,则意味着参数将保留在未指定的,通常是moved-from状态。 如果函数就是这样做的,那么rvalue引用确实是合适的。 请注意,根据用例的不同,在这种情况下,按值传递参数通常是一种很好的选择。

当您修改对象以便调用方可能发现修改后的状态有用时,这是您想要做出的相反的暗示。 对非常量的Lvalue引用意味着将以这种方式操作参数。