Каково значение по умолчанию для участников класса C++

Каковы значения по умолчанию для членов структуры и членов класса в C++, и как эти правила отличаются (например, между классами/структурами/примитивами/и т.д.)? Есть ли обстоятельства, где правила о значениях по умолчанию отличаются?

51
задан X. Liu 28 March 2017 в 18:09
поделиться

2 ответа

В этом отношении в C ++ нет различий между структурами и классами. Все они называются просто типами классов .

Члены типов классов в общем случае не имеют значений по умолчанию. Чтобы член класса получил детерминированное значение, он должен быть инициализирован , что может быть выполнено с помощью

  • Конструктор по умолчанию самого члена
  • Список инициализаторов конструктора включающего класса
  • Явно указанный инициализатор для объекта включающего класса (который включает инициализацию значения и инициализацию агрегатным инициализатором).

Кроме того, все объекты со статической продолжительностью хранения инициализируются нулем при запуске программы.

Помимо вышеперечисленных случаев, члены класса, опять же, не имеют значений по умолчанию и изначально будут содержать непредсказуемые значения мусора.

45
ответ дан 7 November 2019 в 10:20
поделиться

Да, существует один. Если вы инициализируете объект конструктором по умолчанию и используете круглые скобки, тогда члены POD будут инициализированы нулем:

someClass * p = new someClass();
15
ответ дан 7 November 2019 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: