举个例子
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/