Являются ли указатели элементов структуры автоматически инициализированными до нуля?

Если у меня есть следующая структура:

struct MyStruct {
    int *a;
    int *b;
};

И инициализирует его так:

int some_var;
MyStruct s{
    .a = &some_var
};

могу ли я быть уверен, что s.bбудет инициализирован nullptr?

РЕДАКТИРОВАТЬ:

Полный код компиляции, проверенный с помощью g ++ 7.3.0:

// test.cpp
struct MyStruct {
    int *a;
    int *b;
};

int main()
{
    int some_var;
    MyStruct s{
        .a = &some_var
    };
}

Если я напечатаю значения переменных в этом примере, b действительно 0. Но я хочу знать, гарантировано ли это поведение стандартом.

c++,struct,initialization,gcc-warning,

-3

Ответов: 1


1 принят

Обратите внимание, что это синтаксис C99, который не поддерживается стандартом C ++ 11, но поддерживается GCC. Документация GCC указывает, что эти пропущенные члены поля неявно инициализируются так же, как объекты, которые имеют статическую продолжительность хранения.

Альтернативный синтаксис

MyStruct s{
        a: &some_var
    };

Если одно и то же поле инициализировано несколько раз, оно будет инициализировано значением из последней инициализации. Если такая инициализация вызывает побочный эффект, неясно, происходит ли побочный эффект или нет. GCC отбрасывает их, происходит только последняя инициализация.

Вот инициализация, совместимая с C ++ 11:

MyStruct s { &some_var };  // second field would be initialized as one with static duration

В обоих случаях GCC выдаст предупреждение об отсутствии инициализаторов.

C ++, структура, инициализация, НКУ-предупреждение,
Похожие вопросы