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

4
考虑以下代码:
#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吗?
我已经阅读了以下相关问题。但它们没有具体解决我的情况:
- C++中如何使用new运算符初始化内存? - Operator new会将内存初始化为零
1个回答

11

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

不行,对于默认初始化

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

而且元素类型是int,那么

  • 否则,什么也不做:具有自动存储期限的对象(及其子对象)将被初始化为不确定的值。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接