考虑下面的代码:
考虑下面的代码:
#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 的析构函数将按此顺序调用?总的来说,如果存在临时对象,析构函数的调用顺序是什么?
~C()
两次,对吧? - user1773602