[英]Validity of int * array = new int [size]();
int * array = new int [size]();
operator()允许将数组的所有值设置为0(所有位都为0)。 它被称为值初始化。
由于哪个版本的g ++有效?
那么其他编译器呢?
我在哪里可以找到它的标准?
这是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是数组类型,则每个元素都是值初始化的;
- 否则,对象被零初始化
因此,对于一组标量类型的整数,第三和第四个要点适用。
使用()
(包括您的示例)初始化始终是标准C ++的一部分,因为C ++ 98。 虽然标准的较新版本有一些变化,但它们并不适用于您的示例。
已知GCC编译器在2.xx系列的版本中错误地处理()
初始化器。 已知MSVC ++编译器在VC6中错误地处理()
初始化器。 较新版本的MSVC ++ handle ()
初始化程序符合C ++ 98规范。
这是来自2009-11-09的“编程语言C ++标准工作草案”:
8.5初始化器
...
7要初始化T类型的对象,意味着:
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.