隐式字段初始化的规则

Rules for on implicit fields initialization

本文关键字:规则 初始化 字段      更新时间:2023-10-16

我最近修复了我的一个应用程序中的一个错误:问题是驻留在堆栈上的对象有一个未初始化的字段。

该对象具有以下类型的类声明:

struct A{
    int somefield, someotherfield;
    A(): someotherfield(0) {}
}

当声明局部变量(如函数中的A var;)时,somefield未初始化,因此读取它将返回随机值。

我确信未出现在构造函数初始化列表中的类字段总是由合成的普通构造函数初始化(在 int 的情况下为零值)。显然我错了。

那么隐式字段初始化的一般规则是什么?

  • 类和结构由构造器初始化
  • 基本类型int双字符短...未初始化且包含随机数
  • 指针未初始化并指向随机位置
  • 类或结构数组导致每个元素由其构造函数初始化
  • 基本类型或指针的数组是随机的。