“int a = int();”一定给我零?

时间:2012-04-11 06:11:56

标签: c++

int a = int();是否必定给我零?

如果intchardoublebool或指针类型替换,那该怎么办?

请在语言标准中指定哪个位置?

2 个答案:

答案 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";