[#] [Перевод] Не так-то просто обнулять массивы в VC++ 2015
habrabot(difrex,1) — All
2016-08-18 02:00:03


![][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