C++ 隐式字段初始化的规则
我最近修复了我的一个应用程序中的一个bug:问题是,驻留在堆栈上的对象有一个未初始化的字段 对象具有此类型的类声明:C++ 隐式字段初始化的规则,c++,class,constructor,initialization,stack,C++,Class,Constructor,Initialization,Stack,我最近修复了我的一个应用程序中的一个bug:问题是,驻留在堆栈上的对象有一个未初始化的字段 对象具有此类型的类声明: struct A{ int somefield, someotherfield; A(): someotherfield(0) {} } 当声明一个局部变量(比如函数中的var;)时,somefield未初始化,因此读取它会返回一个随机值 我确信,一个类的字段(没有出现在构造函数初始化列表中)总是由一个合成的平凡构造函数(在int的情况下是零值)初始化。显然我错
struct A{
int somefield, someotherfield;
A(): someotherfield(0) {}
}
当声明一个局部变量(比如函数中的var;
)时,somefield
未初始化,因此读取它会返回一个随机值
我确信,一个类的字段(没有出现在构造函数初始化列表中)总是由一个合成的平凡构造函数(在int的情况下是零值)初始化。显然我错了
那么隐式字段初始化的一般规则是什么呢?- 类和结构由构造函数初始化
- 基本类型int双字符短。。。未初始化且包含随机数
- 指针未初始化并指向随机位置
- 类或结构的数组使每个元素由其构造函数初始化
- 基本类型或指针的数组是随机的