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

Jin*_*Yao 4 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;
}
Run Code Online (Sandbox Code Playgroud)

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

0
0
Run Code Online (Sandbox Code Playgroud)

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

我已阅读以下相关问题.但他们并没有专门针对我的案例:

son*_*yao 7

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

不,默认初始化:

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

和元素类型int,则

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

另一方面,列表初始化(从C++ 11开始)就像int* p = new int[2]{};或者int* p = new int[2]{0};,或者像值初始化一样int* p = new int[2]();保证,int所有元素都将被零初始化.