将输入参数作为右值引用传递?
Pass input parameters as rvalue references?
将参数作为右值引用传递只是为了明确表示您要操纵参数是个好主意吗?有点像 const 正确性的对立面。
例如,这个函数接受一个字符串向量,以某种方式对其进行操作,returns 一个布尔值:
static bool isThisSomething(std::vector<string>&& input1);
现在如果调用者想用左值调用这个函数,他必须使用 std::move()
并承认这个向量会被弄乱。这应该可以防止意外的副作用。
std::vector<std::string> lvalueVector = {"foo", "bar"};
bool somethingness = isThisSomething(std::move(lvalueVector));
澄清:
isThisSomething
所做的操作只是一些内部逻辑的一部分,对于调用者来说似乎是无稽之谈。
Is it a good idea to pass parameters as rvalue references just to make it clear that you're going to manipulate the argument?
一般不会。特别是,这取决于您如何处理参数。
如果您通过右值接受一个参数,则意味着该参数将处于未指定的状态,通常是移出状态。如果那是函数的作用,那么右值引用确实是合适的。请注意,根据用例,在这种情况下按值传递参数通常是一个不错的选择。
这与您在修改对象时想要做出的暗示相反,这样调用者可能会发现修改后的状态很有用。对非常量的左值引用意味着将以这种方式操作参数。
将参数作为右值引用传递只是为了明确表示您要操纵参数是个好主意吗?有点像 const 正确性的对立面。
例如,这个函数接受一个字符串向量,以某种方式对其进行操作,returns 一个布尔值:
static bool isThisSomething(std::vector<string>&& input1);
现在如果调用者想用左值调用这个函数,他必须使用 std::move()
并承认这个向量会被弄乱。这应该可以防止意外的副作用。
std::vector<std::string> lvalueVector = {"foo", "bar"};
bool somethingness = isThisSomething(std::move(lvalueVector));
澄清:
isThisSomething
所做的操作只是一些内部逻辑的一部分,对于调用者来说似乎是无稽之谈。
Is it a good idea to pass parameters as rvalue references just to make it clear that you're going to manipulate the argument?
一般不会。特别是,这取决于您如何处理参数。
如果您通过右值接受一个参数,则意味着该参数将处于未指定的状态,通常是移出状态。如果那是函数的作用,那么右值引用确实是合适的。请注意,根据用例,在这种情况下按值传递参数通常是一个不错的选择。
这与您在修改对象时想要做出的暗示相反,这样调用者可能会发现修改后的状态很有用。对非常量的左值引用意味着将以这种方式操作参数。