new int [10]()是否有效c ++?

Nav*_*een 26 c++ arrays constructor initialization

在尝试回答这个问题时,我发现代码int* p = new int[10]();编译好VC9编译器并将整数初始化为0.所以我的问题是:

  1. 首先是这个有效的C++还是微软的扩展?
  2. 是否可以保证初始化数组的所有元素?
  3. 此外,有没有任何区别,如果我做的new int;还是new int();?后者是否保证初始化变量?

Dav*_*eas 29

首先是这个有效的C++还是微软的扩展?

它在C++中有效,标准的相关部分是5.3.4,第一段包含语法

是否可以保证初始化数组的所有元素?

是.第5.3.4/15段指出

创建类型为T的对象的new-expression初始化该对象,如下所示:

...

  • 如果new-initializer的格式为(),则该项是值初始化的(8.5)

其中为POD初始化的值意味着零初始化.

另外,如果我做新的int,是否有任何区别; 或者新的int();?后者是否保证初始化变量?

是的他们是不同的.根据上面的引用new int()将零初始化整数.在同一段的前一个块中:

如果省略new-initializer:

  • 如果T是(可能是cv限定的)非POD类类型(或其数组),则对象是默认初始化的(8.5).如果T是const限定类型,则基础类类型应具有用户声明的默认构造函数.

  • 否则,创建的对象具有不确定的值.如果T是const限定类型,或者包含(直接或间接)const限定类型成员的(可能是cv限定的)POD类类型(或其数组),则该程序是不正确的;

所以new int不会初始化内存.