在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?

Is it C++ standard to set a whole array to NULL on this initializer method?

本文关键字:设置 数组 NULL 是否 标准 C++ 方法      更新时间:2023-10-16
class Foo {};
int main()
{
Foo *foo[500] = { NULL}; 
}

无论操作系统/编译器如何,整个数组都将设置为NULL是标准的吗?

是的,它是有效的,并受到C++标准的保证。

参考:

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

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

struct S { int a; char* b; int c; };
S ss = { 1, "asdf" };

1初始化ss.a,用"asdf"ss.b初始化,用形式int()的表达式的值ss.c,即0

值初始化定义如下:

C++03 8.5 初始值设定项
5 段:

对 T 类型的对象进行值初始化意味着:— 如果 T
是具有用户声明的构造函数 (12.1) 的类类型(子句 9),则调用 T 的默认构造函数(如果 T 无法访问,则初始化格式不正确) 默认构造函数);
— 如果 T 是没有用户声明构造函数的非联合类类型,则每个非静态 T 的数据成员和基类组件是值初始化的;
— 如果 T 是数组类型,则每个元素都是值初始化的;
— 否则,对象初始化为零

如果您的意思是具有单个{NULL}的构造,您希望看到 500NULL秒,是的,这是有效的。

(就我个人而言,我习惯于用逗号{NULL,}结束此类列表,以表明有更多的隐含值,但这只是风格问题。

没有必要,将其设置为 NULL 如果你不会,数组将有垃圾值

初始化的"普通旧C"结构和聚合已完全初始化。这来自C。没有初始值设定项的成员初始化为零。(无论零对其类型表示什么:空指针或 0.0 浮点值)。

在C++中,成员可以是带有构造函数的类类型。 没有初始值设定项的此类成员由其默认构造函数初始化。