C ++默认初始化会将数组元素设置为其默认值吗?

时间:2016-10-12 10:09:39

标签: c++ arrays initialization new-operator

请考虑以下代码:

#include <iostream>

using namespace std;

int main(){
  int* p = new int[2];
  for (int i = 0; i < 2; i++)
    cout << p[i] << endl;  
  return 0;
}

我跑了好几次。它总是产生以下输出:

0
0

我可以假设C ++默认初始化将数组元素设置为默认值吗?在这种情况下,我可以假设p的元素值始终设置为0吗?

我已阅读以下相关问题。但他们没有具体解决我的问题:

1 个答案:

答案 0 :(得分:6)

  

我可以假设C ++默认初始化将数组元素设置为默认值吗?

不,对于default initialization

  
      
  • 如果T是数组类型,则数组的每个元素都是默认初始化的;
  •   

,元素类型为int,然后是

  
      
  • 否则,什么都不做:具有自动存储持续时间的对象(及其子对象)被初始化为不确定   值。
  •   

另一方面,list initialization(自C ++ 11以来),如int* p = new int[2]{};int* p = new int[2]{0};,或value initialization,如int* p = new int[2]();,将保证int所有元素都将被零初始化。