Я знаю о нескольких типах инициализации в C++ и недавно узнал, почему альтернативы">предпочтительна инициализация списка. Но как насчет этого кода? демонстрация
#include <iostream>
#include <string>
class A {
public:
A(int x, std::string y) { std::cout << "normal\n"; }
A(const A& obj) { std::cout << "copy\n"; }
};
int main(){
A a({1, "2"}); // strange initialization
}
Отпечатки:
normal
Это похоже на некоторую инициализацию списка, смешанную с вызовом конструктора с использованием круглых скобок. Поэтому я подумал, что он создаст временный экземпляр A
из {1, "2"}
, а затем вызовет конструктор-копию. Но этого не происходит. Вместо этого он ведет себя как инициализация списка. Может быть, меня просто смущает синтаксис, и это является инициализацией списка?
Если да, то как здесь работает синтаксис? Если нет, то что это за инициализация?