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