C++类成员的默认值是什么

lee*_*roy 51 c++ struct class default-value

结构成员和c ++中类成员的默认值是什么,以及这些规则如何不同(例如,类/结构/基元/等之间)?是否存在有关默认值的规则不同的情况?

AnT*_*AnT 45

在C++中,这方面的结构和类之间没有区别.它们都被称为类类型.

在一般情况下,类类型的成员没有默认值.为了使类成员获得确定性值,必须对其进行初始化,这可以通过以下方式完成

  • 成员本身的默认构造函数
  • 封闭类的构造函数初始化列表
  • 显式指定封闭类的对象的初始化程序(包括值初始化和使用聚合初始化程序初始化).

此外,具有静态存储持续时间的所有对象在程序启动时均为零初始化.

除了上述情况之外,类成员再次没有默认值,并且最初将包含不可预测的垃圾值.

  • @jpyllman:不.静态存储始终为零初始化.无论使用何种操作系统,语言都保证(必需). (14认同)
  • @lorean:我不确定你的意思是"不是C++".具有静态存储持续时间的对象的无条件零初始化也明确地存在于C++标准中.C++与C不同,因为它允许静态对象的动态(即运行时)初始化,但C++仍然说在所有其他初始化开始之前所有静态对象都是零初始化的. (2认同)
  • 由于 C++14 静态对象不一定首先为零初始化,[详细信息](http://en.cppreference.com/w/cpp/language/constant_initialization)。 (2认同)

Han*_*ant 15

是的,有一个.如果使用默认构造函数初始化对象并使用括号,则POD成员将初始化为零:

someClass * p = new someClass();
Run Code Online (Sandbox Code Playgroud)