"int a = int();"一定要给我零吗?

Does "int a = int();" necessarily give me a zero?

本文关键字:int      更新时间:2023-10-16

int a = int();一定要给我一个零吗?

如果int被替换为chardoublebool或指针类型呢?

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

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";
相关文章:
  • 没有找到相关文章