Практически, эти два метода, скорее всего, дадут один и тот же результат.Вероятно, из-за того, что сначала были скомпилированы в вызов самой memset
на современных распространенных платформах.
С точки зрения юриста языка, первый метод инициализирует нулями всех членов структуры, ноничего не указано относительно значений, которые могут принимать отступы байтов (в отдельных элементах или структуре).В то время как второй метод обнуляет все байтов.И чтобы быть еще более точным, нет никакой гарантии, что шаблон байтового нуля является даже нулевым значением объекта.
Поскольку (если кто-то знает их целевую платформу), эти два в значительной степени эквивалентны во всех отношенияхдля программиста это означает, что вы выбираете тот, который лучше всего соответствует вашим предпочтениям.
Лично я предпочитаю инициализацию, а не вызов memset
.Потому что это происходит в момент объявления, а не в другом утверждении, не говоря уже о аспекте переносимости.Это делает невозможным случайное добавление кода между ними, что делает инициализацию не запущенной (хотя маловероятной, что это может быть), или как-то неисправной.Но некоторые могут сказать, что memset
понятнее даже программисту, читающему его позже, который не знает, как работает {0}
.Я не могу полностью игнорировать их аргумент.