Какое значение по умолчанию для членов класса C ++ - PullRequest
49 голосов
/ 11 апреля 2010

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

Ответы [ 2 ]

42 голосов
/ 11 апреля 2010

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

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

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

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

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

15 голосов
/ 11 апреля 2010

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

someClass * p = new someClass();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...