Зачастую инициализация структур данных требует, чтобы все элементы были равны нулю. Даже при программировании на C++ может потребоваться интерфейс с внешним API, для которого это так.Инициализация объекта ко всем нулям
Есть ли практическая разница между:
some_struct s;
memset(&s, 0, sizeof(s));
и просто
some_struct s = { 0 };
ли люди находят себя, используя оба с помощью способа выбора, который является более подходящим для конкретного применения? (Надеюсь, понятно, что это применимо только к структурам POD, и вы получите всевозможные хаосы, если в этой структуре есть строка C++ std ::.)
Для меня, как в основном программиста на С ++, который не использует memset много, я никогда не определенная подписи функции, поэтому я считаю, что второй пример проще использовать в дополнение к тому, чтобы быть менее типичным, более компактным и, возможно, даже более очевидным, так как он говорит «этот объект инициализируется до нуля "прямо в объявлении, а не ждет следующей строки кода и видит," oh, этот объект инициализируется нолем ".
При создании классов и структур на C++ я обычно использую списки инициализации; Мне любопытно думать о мыслях о двух инициализациях «C style» выше, а не о сравнении с тем, что доступно на C++, поскольку я подозреваю, что многие из нас взаимодействуют с библиотеками C, даже если мы сами кодируем в основном на C++.
Редактировать: Нейл Баттерворт поставил this question, что я считаю интересным следствием этого вопроса.
В C++ инициализация нуля не обеспечивает большого функционального использования, поскольку конструктор гарантирует, что тип готов к работе. – Puppy
@DeadMG: Что делает конструктор типа POD? –
@ dash-tom-bang: Он абсолютно ничего не делает. – AnT