Cur*_*ous 0 c++ operator-precedence language-lawyer c++17
我的印象是以下容易发生泄漏
class Something {
std::unique_ptr<A> a;
std::unique_ptr<int> b{new int{3}};
std::unique_ptr<C> c;
public:
Something() : a{new A{}}, c{new C{}} {};
};
Run Code Online (Sandbox Code Playgroud)
如果评估顺序如下
new A{}new int{3}new C{}a{}b{}c{}我正在查看新的C++ 17功能(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0145r3.pdf),该功能修复了之前评估错误的顺序C++的版本,但它似乎只谈论函数参数评估.
我查看了关于评估顺序的cppreference文档(http://en.cppreference.com/w/cpp/language/eval_order),它似乎也没有提到这一点.
以上是否有明确的评估顺序?(现在使用C++ 17或以前版本的C++)
不,那个订单是不允许的; 语言并不那么疯狂.
这些是完全不同的完整表达式,因此它由[intro.execution]/16控制:
在与要评估的下一个全表达式相关联的每个值计算和副作用之前,对与全表达式相关联的每个值计算和副作用进行排序.