Не должен временный A(3)
быть уничтоженным до того, как «Здесь» будет напечатано?
#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 a[2] = { A(1), A(2) }, a2(3);
Я на самом деле не знал, что тебе разрешили это сделать.
Как продолжение ответа @ neil-kirk причина A(3)
не является временным, что оригинальная линия
A a[2] = { A(1), A(2) }, A(3);
действительно стенографическое объявление двух переменных a[]
а также A
A a[2] = { A(1), A(2) };
A A(3);
похоже на то, как вы могли бы сделать
int a = 1, b = 2;
или же
int a = 1;
int b = 2;