Ваша интуиция на самом деле права. В ретроспективе int x;
неинициализация (а также SomeType foo;
может оставить некоторые элементы неинициализированными) является постоянным источником ошибок и ошибок безопасности. Рациональным было, как указал R Саху , «не платить за то, что вам не нужно», что является основной философией C ++. Теперь может показаться смешным, что инициализация локальной переменной int
может быть источником проблем с производительностью, особенно с сегодняшними оптимизаторами, но в старые времена это было.
Сегодня все еще существует необходимость в инициализации переменных после того, как они определены (например, подумайте о массивах, которые вам нужно заполнить впоследствии). Но способ, которым это обрабатывается в C ++, неудачен (задним числом).
Лучшим вариантом было бы не допустить неинициализированных переменных, если программист явно не запрашивает их, например:
int x = unitialized; // where uninitialized is a keyword
... опять же, оглядываясь назад * чтобы инициализировать ваши переменные, например, int x{};
(почти) всегда использует auto, что заставляет вас инициализироваться, например,
auto x = int{};