是否存在成员访问运算符的lhs的评估与其参数的副作用之间的顺序排序关系?

时间:2017-07-20 09:51:39

标签: c++ expression c++14 side-effects

我已从cppreference中读过Order of evalution,但我无法找到任何与此情况有关的规则。这是否意味着之前没有顺序关系,或者我错过了什么?感谢。

以下代码段给出了一个例子。

#include <memory>

struct Foo {
  void func(std::unique_ptr<Foo>) {}
};

int main() {
  auto ptr = std::make_unique<Foo>();
  ptr->func(std::move(ptr)); // Is this valid?
  return 0;
}

1 个答案:

答案 0 :(得分:6)

在C ++之前1z ,不要写这个。

[expr.call]

发布C ++ 1z是的
  

postfix-expression在表达式列表中的每个表达式和任何默认参数之前进行排序。

这里的Postfix表达式是函数调用,因此执行顺序类似于

> JSON.parse(JSON.stringify([ 1,,2 ]));
[ 1, null, 2 ]

这当然是正确的。