7

int a = int();一定会给我零分吗?

ifint替换为char, double,bool或指针类型怎么样?

请问这是在语言标准中的哪里指定的?

4

2 回答 2

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),则将对象设置为转换为 T 的值 0(零)
— 如果 T 是非联合类类型,则每个非静态数据成员和每个基类子对象
都初始化为零;
— 如果 T 是联合类型,则对象的第一个命名数据成员为零初始化;
— 如果 T 是数组类型,则每个元素都初始化为零;
— 如果 T 是引用类型,则不执行初始化。

注意:粗体文字是我强调的。

于 2012-04-11T06:12:50.107 回答
0

是的,任何内置类型在默认初始化时总是初始化为零。请记住,在大多数情况下,内置类型默认初始化,因此不一定会打印出来0

int i;
std::cout << i << "\n";
于 2012-04-11T06:13:38.593 回答