考虑以下代码:
#include <iostream>
struct A {
~A() { std::cout << "~A" << std::endl; }
};
struct B {
~B() { std::cout << "~B" << std::endl; }
};
struct C {
~C() { std::cout << "~C" << std::endl; }
void operator<<(const B &) {}
};
C f(const A &a = A()) {
return C();
}
int main() {
f(A()) << B();
}
使用 GCC 编译并运行会得到以下输出:
~C
~A
~B
是否保证在与其他编译器一起编译时,将按此顺序调用 A、B 和 C 类型的临时对象的析构函数?一般来说,如果有的话,对临时对象的析构函数调用的顺序是什么?