【发布时间】:2019-11-29 14:50:26
【问题描述】:
举个例子
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 并且据我收集的所有函数参数在复制/移动之前首先评估(没有顺序保证)(我认为这是函数调用而不是参数评估)到函数的上下文。
【问题讨论】:
-
这与operator-precedence无关。
-
@user207421 不幸的是,SO 上的
operator-precedence标记确实搞砸了。它有一个错误的定义,别名为evaluation-order,这与这里真正相关。
标签: c++ move-semantics order-of-execution