Каковы значения по умолчанию для членов структуры и членов класса в С++ и как эти правила различаются (например, между классами/структурами/примитивами и т.д.)? Существуют ли ситуации, когда правила относительно значений по умолчанию отличаются?
Каково значение по умолчанию для членов класса С++
Ответ 1
В С++ нет различий между структурами и классами. Все они называются просто типами классов.
Члены типов классов не имеют значений по умолчанию в общем случае. Чтобы член класса мог получить детерминированное значение, он должен быть инициализирован, что может быть выполнено
- Конструктор по умолчанию самого элемента
- Список инициализаторов конструктора класса-оболочки
- Явно заданный инициализатор для объекта входящего класса (который включает инициализацию инициализации инициализации и инициализацию).
Кроме того, все объекты со статической продолжительностью хранения инициализируются нулями при запуске программы.
Помимо вышеуказанных случаев, члены класса снова не имеют значений по умолчанию и изначально будут содержать непредсказуемые значения мусора.
Ответ 2
Да, есть один. Если вы инициализируете объект с помощью конструктора по умолчанию и используете круглые скобки, то члены POD будут инициализированы нолем:
someClass * p = new someClass();