我发现两个相似的语句之间有不同的执行顺序(唯一的区别是下面的语句有一个附加的;
)。析构函数的顺序不同。C++ 是否有相应的规范,或者它只是一个未指定的行为?
环境:GCC10
#include <iostream>
template <int num>
struct S {
S() {std::cout << "S(" << num << ")\n"; }
~S() {std::cout << "~S(" << num << ")\n"; }
};
int main() {
({S<1>(), S<2>();});
std::cout << "-----------------------------------\n";
({S<3>(), S<4>();;});
}
输出:
S(1)
S(2)
~S(1)
~S(2)
-----------------------------------
S(3)
S(4)
~S(4)
~S(3)