C++ выполняет динамическую инициализацию глобальных переменных перед тем, как вызывается функция main(). Если инициализация какой-то глобальной переменной вызывает функцию, которая падает, программа завершится прежде, чем ты достигнешь точку останова в начале main().
Есть два критических сценария, в которых ты обязан использовать список инициализации вместо присваивания в конструкторе:
Нестатические const-члены данных: Эти члены нельзя изменять после инициализации. Присваивание в теле конструктора происходит слишком поздно — const-члены должны быть инициализированы в момент объявления с помощью списка инициализации.
Члены данных-ссылки: Ссылки должны быть привязаны к объекту в момент создания и не могут быть переназначены. Список инициализации — это единственный механизм для установки этой привязки до того, как начнёт выполняться тело конструктора.
Использование присваивания вместо списков инициализации в этих случаях приведёт к ошибкам компиляции. Список инициализации гарантирует правильный момент инициализации и соответствует требованиям языка C++ для const и ссылочных членов.
Инициализация глобальных переменных происходит после начала выполнения функции main(), поэтому сбой при инициализации глобальных переменных не помешает программе достичь breakpoint в начале main().
Новый — ещё не проверен сообществом
Вы