举个例子
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));
}
我认为这将是有效的代码,因为 anstd::move()
只是 astatic_cast
并且从我收集的所有函数参数中,首先评估所有函数参数(没有顺序保证),然后再复制/移动(我假设这是函数调用的一部分而不是参数评估)到函数的上下文。
举个例子
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));
}
我认为这将是有效的代码,因为 anstd::move()
只是 astatic_cast
并且从我收集的所有函数参数中,首先评估所有函数参数(没有顺序保证),然后再复制/移动(我假设这是函数调用的一部分而不是参数评估)到函数的上下文。