Часто правильная инициализация структур данных состоит в том, чтобы установить все элементы в ноль. Даже при программировании на C ++ может потребоваться интерфейс с внешним API, для которого это имеет место.
Есть ли практическая разница между:
some_struct s;
memset(&s, 0, sizeof(s));
и просто
some_struct s = { 0 };
Есть ли люди, которые используют оба, с методом выбора, который больше подходит для данного приложения? (Надеюсь, понятно, что в настоящее время это применимо только к структурам POD; вы получите все виды хаоса, если в этой структуре будет C ++ std :: string.)
Для себя, в основном для программиста на C ++, который мало использует memset, я никогда не уверен сигнатуры функции, поэтому я считаю, что второй пример проще в использовании, чем меньше типизированный, более компактный и, возможно, даже более очевидный, поскольку он говорит «этот объект инициализируется нулем» прямо в объявлении, а не ожидает следующей строки кода и видит: «о, этот объект инициализируется нулями».
При создании классов и структур в C ++ я склонен использовать списки инициализации; Мне любопытны мысли о двух приведенных выше инициализациях в стиле «С», а не сравнение с тем, что доступно в C ++, поскольку я подозреваю, что многие из нас взаимодействуют с библиотеками C, даже если мы сами кодируем в основном на C ++.
Редактировать: Нил Баттерворт задал этот вопрос , в продолжение, что я считаю интересным следствием этого вопроса.