"int a = int();"一定要给我零吗?
Does "int a = int();" necessarily give me a zero?
int a = int();
一定要给我一个零吗?
如果int
被替换为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),则对象设置为 0(零)的值转换为 T;
— 如果 T 是非联合类类型,则每个非静态数据成员和每个基类子对象
初始化为零;
— 如果 T 是联合类型,则对象的第一个命名数据成员为零初始化;
— 如果 T 是数组类型,则每个元素初始化为零;
— 如果 T 是引用类型,则不执行初始化。
注意:粗体文本由我强调。
,任何内置类型在默认初始化时始终初始化为零。请记住,在大多数情况下,内置类型不是默认初始化的,因此不一定会打印出0
:
int i;
std::cout << i << "n";
- 没有找到相关文章