struct some_struct{
int a;
};
some_struct n = {};
n.a будет 0 после этого;
Я знаю, что это заключает в фигурные скобки форму инициализации, наследован от C и поддерживается для совместимости с программами C, но это только компилирует с C++, не с компилятором C. Я использую Visual C++ 2005.
В C этот тип инициализации
struct some_struct n = {0};
корректно и обнулит - инициализируют всех членов структуры.
Действительно ли пустой является пара формы фигурных скобок стандарта инициализации? Я увидел эту форму в первый раз инициализации в учебном руководстве WinAPI из MSDN.
Пустая форма инициализации в скобках является стандартной в C++ (она явно разрешена грамматикой). См. C Static Array Initialization - how verbose do I need to be? для более подробной информации, если вам интересно.
Я предполагаю, что это было добавлено в C++, потому что, возможно, не во всех ситуациях уместно использовать значение 0 для значения init по умолчанию.
{0} - это, по-видимому, C99.
Другой способ инициализации, совместимый с C89 и C++, заключается в следующем "трюке":
struct some_struct{ int a; };
static some_struct zstruct;
some_struct n = zstruct;
Здесь используется тот факт, что статические переменные предварительно инициализируются 0'ed памятью, в отличие от объявлений на стеке или куче.
Это стандарт в C++, это не стандарт в C.
Синтаксис был введен в C++, потому что некоторые объекты не могут быть инициализированы 0, и не было бы общего способа выполнить инициализацию значений массивов.
Я нахожу следующую ссылку очень информативной по этому вопросу