![][1]В чем разница между двумя этими определениями инициализированных локальных переменных С/С++?
char buffer[32] = { 0 };
char buffer[32] = {};
Одно отличие состоит в том, что первое допустимо в языках С и С++, а второе — только в С++.
Что ж, давайте тогда сосредоточимся на С++. Что _означают _эти два определения?
Первое гласит: компилятор должен установить значение первого элемента массива в ноль и затем (грубо говоря) инициализировать нулями оставшиеся элементы массива. Второе означает, что компилятор должен инициализировать нулями весь массив.
Эти определения несколько различаются, но по факту результат один — весь массив должен быть инициализирован нулями. Поэтому согласно правилу «as-if» в С++ они одинаковы. То есть любой достаточно современный оптимизатор должен генерировать идентичный код для каждого из этих фрагментов. Верно? [Читать дальше →][2]
[1]:
https://habrastorage.org/files/677/7b6/1e1/6777b61e12ed41a0854a63a971955e79.jpg
[2]:
https://habrahabr.ru/post/307920/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut