Інші відповіді досить хороші. Існує деяка історія навколо цього в C. У C ++ є різниця між конструктором та оператором призначення.
Я здивований, що ніхто не згадує додатковий момент: тримати декларації окремо від використання змінної іноді може бути набагато читабельніше.
Візуально кажучи, при читанні коду більш звичні артефакти, такі як типи та назви змінних, - це не те, що вискочить у вас. Це твердження, які вас найбільше цікавлять, проводите більшу частину часу, дивлячись на це, і тому є тенденція оглядати решту.
Якщо у мене є деякі типи, імена та призначення, які відбуваються в тому самому тісному просторі, це трохи перевантажує інформацію. Крім того, це означає, що щось важливе відбувається в просторі, на який я зазвичай оглядаюсь.
Це може здатися трохи протиінтуїтивним, але це один випадок, коли ваш джерело займає більше вертикального простору, може зробити це кращим. Я вважаю це схожим на те, чому ви не повинні писати спаковані рядки, що заповнюють варення, які роблять божевільну кількість арифметики вказівника та присвоєння у тісному вертикальному просторі - тільки тому, що мова дозволяє вам відволіктися від таких речей, не означає, що вам слід робити. це постійно. :-)