Alo*_*ave 17
是否
int a = int();一定给我一个零?
是的,标准保证它给你零.
这称为值初始化.对于类型int,值初始化基本上最终为零初始化.
请问在语言标准中指定了哪里?
规则在8.5节的标准中明确规定.我将在这里引用相关的Q:
C++ 03:8.5初始化程序
第7段:
初始值为空集括号的对象,即(),应进行值初始化.
值初始化和零初始化在8.5第5段中定义为:
对值类型T的对象进行值初始化意味着:
- 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);
- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,对象被零初始化到零初始化的类型T指的对象:
- 如果T是标量类型(3.9),则将对象设置为0(零)转换为T的值 ;
- 如果T是非联合类类型,则每个非静态数据成员和每个基类子对象
都是零初始化的;
- 如果T是联合类型,则对象的第一个命名数据成员为零初始化;
- 如果T是数组类型,则每个元素都是零初始化的;
- 如果T是引用类型,则不执行初始化.
注意:我强调粗体文本.