举个例子

void f(B b, A&& a) {...}
B g(B b, A a) {...}

int main() {
    B b;
    A a;
    f(g(b, a), std::move(a));
}

我认为这是有效的代码,因为std::move()只是static_cast,从我收集的数据中,所有函数参数在复制/move 之前首先进行评估(不保证顺序)(我认为这是函数调用的一部分,而不是参数评估)功能的上下文。

最佳答案

此代码有效。

正如您所说的,std::move只是将rvalue转换为static_cast(&&)。

表达方式:

f(g(b, a), std::move(a));

即使不能保证参数求值顺序,也不会导致未定义的行为。

实际上,第二个参数std::move(a)的评估不会影响第一个参数的评估。

“move 操作”(此处意为“窃取”自变量所拥有的资源的操作)是f主体中可能发生的事情(当所有自变量已被求值时)。

关于c++ - 什么时候对函数参数C++执行 move 操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57132278/

10-10 18:07
查看更多