int * array = new int [size]();
operator()允许将数组的所有值设置为0(所有位都为0)。它被称为值初始化。
哪个版本的g ++有效?
其他编译器怎么样?
我在哪里可以找到它的标准?
答案 0 :(得分:6)
这是C ++标准的一部分;如果它在g ++中无效,那么g ++是不合格的。根据C ++标准(ISO / IEC 14882:2003),有几个部分是相关的:
关于新表达的5.3.4 / 15说:
8.5 / 5关于初始化者说:如果new-initializer的格式为(),则该项为值初始化
对T类型的对象进行值初始化意味着:
- 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的); < / p>
- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,该对象为零初始化
因此,对于一个标量类型的int数组,第三个和第四个项目符号适用。
答案 1 :(得分:1)
使用()
初始化(包括您的示例)始终是标准C ++的一部分,因为C ++ 98。虽然标准的较新版本有一些变化,但它们并不适用于您的示例。
众所周知,GCC编译器会在2.x.x系列的版本中错误地处理()
初始值设定项。已知MSVC ++编译器在VC6中错误地处理()
初始值设定项。较新版本的MSVC ++根据C ++ 98规范处理()
初始值设定项。
答案 2 :(得分:0)
这是来自“编程标准的工作草案”
语言C ++“日期为2009-11-09:
8.5初始化程序
...
7对T类型的对象进行值初始化意味着:
...