Это всегда хорошая практика инициализировать ваши переменные, но иногда не требуется строго . Учтите следующее:
int a;
for (a = 0; a < 10; a++) { } // a is initialized later
или
void myfunc(int& num) {
num = 10;
}
int a;
myfunc(&a); // myfunc sets, but does not read, the value in a
или
char a;
cin >> a; // perhaps the most common example in code of where
// initialization isn't strictly necessary
Это всего лишь пара примеров, когда нет необходимости инициализировать переменную, поскольку она устанавливается позже (но не доступна между объявлением и инициализацией).
В целом, это не помешает всегда инициализировать ваши переменные при объявлении (и действительно, это, вероятно, лучшая практика).