将参数作为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
所做的操作只是某些内部逻辑的一部分,对于调用方来说似乎是无稽之谈。
将参数作为rvalue引用传递,只是为了清楚地表明您要操作参数,这是一个好主意吗?
一般不是。 尤其是,这取决于你是如何操纵论点的。
如果通过rvalue接受参数,则意味着参数将保留在未指定的,通常是moved-from状态。 如果函数就是这样做的,那么rvalue引用确实是合适的。 请注意,根据用例的不同,在这种情况下,按值传递参数通常是一种很好的选择。
当您修改对象以便调用方可能发现修改后的状态有用时,这是您想要做出的相反的暗示。 对非常量的Lvalue引用意味着将以这种方式操作参数。