int*array = new int [size]()的有效性;

Nad*_*LEM 5 c++ compiler-construction standards g++

int * array = new int [size]();
Run Code Online (Sandbox Code Playgroud)

operator()允许将数组的所有值设置为0(所有位都为0).它被称为值初始化.

由于哪个版本的g ++有效?

那么其他编译器呢?

我在哪里可以找到它的标准?

Jam*_*lis 6

这是C++标准的一部分; 如果它在g ++中无效,那么g ++是不合格的.根据C++标准(ISO/IEC 14882:2003),有几个部分是相关的:

关于新表达的5.3.4/15说:

如果new-initializer的格式为(),则该项将进行值初始化

8.5/5关于初始化者说:

对值类型T的对象进行值初始化意味着:

- 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);

- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;

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

- 否则,对象被零初始化

因此,对于一组标量类型的整数,第三和第四个要点适用.


Nik*_*sov 0

这是来自 2009 年 11 月 9 日的“工作草案,编程标准\nC++ 语言”:

\n\n 8.5 初始化器
\n...
\n7 对 T 类型的对象进行值初始化意味着:

\n\n
    \n
  • 如果 T 是一个(可能是 cv 限定的)类类型(第 9 条),具有用户提供的构造函数 (12.1),则调用 T 的\n默认构造函数(如果 T 没有可访问的默认值,则初始化是格式错误的\ n构造函数);\n
  • 如果 T 是一个(可能是 cv 限定的)非联合类类型,没有用户提供的构造函数,则该对象\nis 零初始化,并且如果 T\xe2\x80\x99s 隐式声明的默认构造函数是不平凡的,调用该构造函数。\n
  • 如果 T 是数组类型,则每个元素都经过值初始化;\n
  • 否则,该对象将被零初始化。\n
\n\n

...\n

\n