это отдельные понятия. Лучше не путать их так рано.

+ при использовании синтаксиса initializer_list для инициализации объекта обычные конструкторы объекта также участвуют в разрешении перегрузки, когда никакое другое правило инициализации списка не применяется. Насколько я понимаю, следующий код вызывает X :: X (int)

class X { int a_; X(int a):a_(a) {} );

void foo() {
   X bar{3};
}

Но я не понимаю, почему регулярные конструкторы также рассматриваются в контексте initializer_lists. Я чувствую, что многие программисты сейчас пишут X {3} для вызова конструктора вместо X (3) для вызова конструктора. Мне вообще не нравится этот стиль, так как он заставляет меня думать, что у объекта нет обычного конструктора.

По какой причине синтаксис initializer_list также можно использовать для вызова обычного конструктора? Есть ли причина сейчас предпочитать этот синтаксис обычным вызовам конструктора?

Ответы на вопрос(1)

Ваш ответ на вопрос