Прежде всего, я обнаружил, что термин «список инициализаторов» используется для двух, казалось бы, разных вещей: инициализация классов с помощью фигурных скобок, подобных этой Foo foo{1}
, и написание конструкторов с использованием этого синтаксиса Foo::Foo(int test) : m_test(test)
. Эти двое связаны, или я просто все перепутал?
Теперь к моему актуальному вопросу. Я прочитал , что инициализация фигурной скобки не позволяет сужаться. Однако это не может быть единственной разницей.
struct Test {
int one;
int two;
};
int main() {
Test test{1, 2};
}
Этот код работает, хотя Test::Test(int,int)
объявлен нигде. Так что же делает инициализация фигурных скобок иначе, чем обычная инициализация? Это просто синтактика c сахар или есть более глубокие причины, почему он существует?