临时的A(3)不应该在“Here”被打印之前销毁?
#include <iostream> struct A { int a; A() { std::cout << "A()" << std::endl; } A(int a) : a(a) { std::cout << "A(" << a << ")" << std::endl; } ~A() { std::cout << "~A() " << a << '\n'; } }; int main() { A a[2] = { A(1),A(2) },A(3); std::cout << "Here" << '\n'; }
输出:
A(1) A(2) A(3) Here ~A() 3 ~A() 2 ~A() 1
解决方法
A(3)不是一个临时对象,而是一个类型为A的对象.它与此相同的逻辑:
A a[2] = { A(1),a2(3);
我实际上并不知道你被允许做到这一点.