我读过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;
}发布于 2017-07-20 10:01:52
C++1z,,NO,,不要写这个。
发布C++1z是的,来自[expr.call]
后缀表达式在表达式列表和任何默认参数中的每个表达式之前进行排序。
这里的后缀表达式是函数调用,因此执行顺序类似于
auto ptr_ = ptr.operator->();
auto func_ = &decltype(ptr)::element_type::func;
ptr_->*func_(std::move(ptr));这当然是正确的。
https://stackoverflow.com/questions/45211257
复制相似问题