1
class Foo {};

int main()
{
   Foo *foo[500] = { NULL}; 
}

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

4

4 回答 4

5

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

参考:

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

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

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

ss.a使用、 和形式的表达式的值进行初始化1,即. ]ss.b"asdf"ss.cint()0

值初始化定义如下:

C++03 8.5 初始化器
第 5 段:

对T 类型的对象进行值初始化意味着:
— 如果 T 是具有用户声明的构造函数(12.1)的类类型(第 9 条),则调用 T 的默认构造函数(如果 T没有可访问的默认构造函数);
— 如果 T 是没有用户声明的构造函数的非联合类类型,则 T 的每个非静态数据成员和基类组件都是值初始化的;
— 如果 T 是一个数组类型,那么每个元素都是值初始化的;
— 否则,对象被零初始化

于 2012-10-27T06:25:15.110 回答
1

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

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

于 2012-10-27T06:23:14.130 回答
0

没有必要将其设置为 NULL 如果您不希望该数组将具有垃圾值

于 2012-10-27T06:20:25.320 回答
0

已初始化的“普通旧 C”结构和聚合已完全初始化。那来自C。没有初始化器的成员被初始化为零。(无论零对它们的类​​型意味着什么:空指针或 0.0 浮点值)。

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

于 2012-10-27T06:20:59.797 回答