DaE*_*sew 8 c++ move-semantics order-of-execution
举个例子
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));
}
Run Code Online (Sandbox Code Playgroud)
我认为这将是有效的代码,因为a std::move()仅仅是a static_cast,从我收集到的所有函数参数首先进行评估(不保证顺序),然后再复制/移动(我认为这是函数调用的一部分,而不是参数评估)到函数的上下文。
此代码有效。
正如你所说,std::move只是一个static_cast以右值(&&)。
表达方式:
f(g(b, a), std::move(a));
Run Code Online (Sandbox Code Playgroud)
即使不保证参数评估顺序,也不会导致未定义的行为。
实际上,对第二个参数std::move(a)的评估不会影响对第一个参数的评估。
“移动操作”(这里是指“窃取”参数所持有的资源的操作)是f(当所有参数都已经被求值时)的主体中可能发生的事情。
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |