在这个初始化方法上将整个数组设置为NULL是C++标准吗?

Vin*_*rta 1 c++ arrays standards

class Foo {};

int main()
{
   Foo *foo[500] = { NULL}; 
}
Run Code Online (Sandbox Code Playgroud)

无论OS /编译器是否标准整个阵列都将被设置为NULL

Alo*_*ave 5

是的,它是有效的,并由C++标准保证.

参考:

C++ 03标准8.5.1聚合
第7段:

如果列表中的初始值设定项少于聚合中的成员,则未明确初始化的每个成员都应进行值初始化(8.5).[例:

 struct S { int a; char* b; int c; };
 S ss = { 1, "asdf" };
Run Code Online (Sandbox Code Playgroud)

初始化ss.awith 1,ss.bwith "asdf"ss.cwith表达式的表达式int(),即0.]

值初始化定义如下:

C++ 03 8.5初始化程序
第5段:

值初始化类型的物体T是指:
-如果T是一个类型(第9节)与用户声明的构造(12.1),然后对T中的默认构造函数被调用(以及初始化是形成不良的如果T没有可访问的默认构造函数);
- 如果T是没有用户声明的构造函数的非联合类类型,则T的每个非静态数据成员和基类组件都是值初始化的;
- 如果T是数组类型,则每个元素都是值初始化的;
- 否则,对象被零初始化