int a = int();
一定会给我零分吗?
ifint
替换为char
, double
,bool
或指针类型怎么样?
请问这是在语言标准中的哪里指定的?
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),则将对象设置为转换为 T 的值 0(零);
— 如果 T 是非联合类类型,则每个非静态数据成员和每个基类子对象
都初始化为零;
— 如果 T 是联合类型,则对象的第一个命名数据成员为零初始化;
— 如果 T 是数组类型,则每个元素都初始化为零;
— 如果 T 是引用类型,则不执行初始化。
注意:粗体文字是我强调的。
是的,任何内置类型在默认初始化时总是初始化为零。请记住,在大多数情况下,内置类型未默认初始化,因此不一定会打印出来0
:
int i;
std::cout << i << "\n";