Initialization in C++ is bonkers (2017)
a year ago
- #Programming
- #Initialization
- #C++
- C++的初始化规则非常复杂,如果处理不当可能导致未定义行为
- C++有三种主要初始化类型:默认初始化、值初始化和零值初始化,每种都有特定规则
- 默认初始化会调用类的默认构造函数,但基本类型会保持未初始化状态(值不确定)
- 值初始化可能首先进行零值初始化,特别是对于具有非用户提供默认构造函数的类
- 零值初始化会将基本类型设为0,类成员归零,并在其他初始化前应用于静态/线程局部变量
- 用户提供的构造函数会影响初始化行为,在声明处默认化构造函数与在定义处默认化会影响其分类
- 对具有非用户提供默认构造函数的类进行值初始化时包含零值初始化,确保成员初始为0
- 读取未初始化变量是未定义行为,这强调了显式初始化的重要性
- C++提供了18种初始化形式,突显了该语言在这一领域的复杂性
- 最佳实践:始终初始化变量以避免未定义行为并确保程序执行的可预测性