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

c ++中一个struct的成员和一个类的成员的默认值是什么,这些规则又是如何不同的(比如在classes / structs / primitives / etc之间)? 有没有关于默认值的规则有所不同的情况?

C ++中的结构和类在这方面没有区别。 他们都被称为类types

一般情况下,类types的成员没有默认值。 为了让一个类的成员获得一个确定的价值,它必须被初始化 ,这可以通过

  • 成员本身的默认构造函数
  • 包含类的构造函数初始值设定项列表
  • 为包含类的对象明确指定了初始值设定项(包括使用聚合初始值设定项进行值初始化和初始化)。

另外,所有具有静态存储持续时间的对象在程序启动时都是零初始化的。

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

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

someClass * p = new someClass();