Другие ответы довольно хороши. В Си есть некоторая история об этом. В C ++ есть разница между конструктором и оператором присваивания.
Я удивлен, что никто не упоминает дополнительный пункт: хранение объявлений отдельно от использования переменной иногда может быть намного более читабельным.
Визуально говоря, при чтении кода более приземленные артефакты, такие как типы и имена переменных, не являются тем, что бросается в глаза. Это заявления, которые вы обычно больше всего интересуете, тратите большую часть времени, уставившись на них, и поэтому есть тенденция взглянуть на все остальное.
Если у меня есть несколько типов, имен и назначений, которые происходят в одном и том же ограниченном пространстве, это немного перегружает информацию. Кроме того, это означает, что в пространстве происходит нечто важное, на что я обычно смотрю.
Это может показаться немного нелогичным, но это один из примеров, когда ваш источник занимает больше вертикального пространства, что может сделать его лучше. Я вижу это как сродни тому, почему вы не должны писать переполненные строки, которые делают сумасшедшие арифметические действия и присваивания указателей в узком вертикальном пространстве - только потому, что язык позволяет вам сойти с рук с такими вещами, не означает, что вы должны делать это все время. :-)