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

fel*_*lix 4 c++ expression side-effects c++14

我已经阅读了cppreference 的评估顺序,但我找不到任何与此情况相关的规则.这是否意味着之前没有顺序关系,或者我错过了什么?谢谢.

以下代码段给出了一个示例.

#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;
}
Run Code Online (Sandbox Code Playgroud)

Pas*_* By 6

在C++之前1z NO,不要写那个.

发表C++ 1z是的,来自[expr.call]

后缀表达式在表达式列表中的每个表达式和任何默认参数之前进行排序.

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

auto ptr_ = ptr.operator->();
auto func_ = &decltype(ptr)::element_type::func;
ptr_->*func_(std::move(ptr));
Run Code Online (Sandbox Code Playgroud)

这当然是正确的.