int a = int();
是否必定给我零?
如果int
被char
,double
,bool
或指针类型替换,那该怎么办?
请在语言标准中指定哪个位置?
答案 0 :(得分:17)
int a = int();
是否一定会给我一个零?
是的,标准保证它给你零
这称为值初始化。对于类型int
,值初始化基本上最终为零初始化。
请在语言标准中指定哪个位置?
规则在第8.5节的标准中明确规定。 我将在这里引用相关的问题:
C ++ 03:8.5初始化程序
第7段:
初始化程序为空括号的对象,即(),应进行值初始化。
价值初始化&零初始化在 8.5 Para 5 中定义为:
要值初始化,T类型的对象意味着:
- 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则为默认值 调用T的构造函数(如果T无法访问,则初始化是错误的 默认构造函数);
- 如果T是非联合类类型而没有用户声明的构造函数,那么每个非静态 T的数据成员和基类组件是值初始化的;
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,对象为零初始化零初始化 T类型的对象意味着:
- 如果T是标量类型(3.9),则将对象设置为值0(零)转换为T ;
- 如果T是非联合类类型,则每个非静态数据成员和每个基类子对象
零初始化;
- 如果T是联合类型,则对象的第一个命名数据成员为零初始化;
- 如果T是数组类型,则每个元素都是零初始化的;
- 如果T是引用类型,则不执行初始化。
注意:我强调粗体文本。
答案 1 :(得分:0)
是的,默认初始化时,任何内置类型始终初始化为零。请注意,在大多数情况下,内置类型不默认初始化,因此无法打印0
:
int i;
std::cout << i << "\n";