在此初始值设定项方法上将整个数组设置为 NULL 是否C++标准?
Is it C++ standard to set a whole array to NULL on this initializer method?
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++中,成员可以是带有构造函数的类类型。 没有初始值设定项的此类成员由其默认构造函数初始化。
相关文章:
- 是否可以在C++中使用初始化列表设置数组的特定成员?
- 节点.js C++插件 - 设置数组的某个索引
- 如何使用const成员变量设置数组大小
- 如何使用函数参数设置数组大小
- 使用变量设置数组长度
- 设置数组一次索引很多?复合文字
- 初始化过多的错误加上重新设置数组的函数
- 动态设置数组大小并从文本文件中读取数组值
- 初始化后在 C++ 上设置数组大小
- 是否设置数组的某些字段,将其他字段设置为零
- 在运行时设置数组维度
- C++在初始化类时设置数组数据成员的大小
- 无法传递函数值来设置数组大小C++
- 设置数组元素时MSVC访问冲突
- 需要设置数组字符串长度,使其恰好为13
- 设置数组中的项
- c++在类中设置数组值
- c++应该循环并设置数组还是手动设置以提高性能
- c++入门课程作业:井字游戏;设置数组时出现错误
- 在构造函数中设置数组意味着稍后会失败