Я знаю о нескольких типах инициализации в 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"}
, а затем вызовет конструктор копирования. Но этого не происходит. Вместо этого он ведет себя как инициализация списка. Может, меня просто сбивает с толку синтаксис, а это это инициализация списка?
Если да, то как здесь синтаксис работает? Если нет, то что это за инициализация?