我试图找出将数组初始化为全零的正确方法(即好像你在数组上做了一个memset)。
我在堆栈溢出(和其他来源)的各个区域找到了以下方法:
char myArray1[10] = {0};
char myArray2[10] = {0,};
char myArray3[10] = {[0 ... 9] = 0};
char myArray4[10] = {0,0,0,0,0,0,0,0,0,0};
我更喜欢最简单的语法变体......我使用的是{0},但我没有找到任何证据确实这是正确的。
答案 0 :(得分:5)
数组中缺少的元素将初始化为0.此外,C ++允许您将统一初始化设备留空。因此,以下工作是最小的,也是最有效的:
T array[N] = {};
值得注意的是,这适用于任何类型T
,它可以是默认构造的或初始化的,而不仅仅是内置类型。例如,以下工作,并将打印foo
五次:
#include <iostream>
struct foo {
foo() { std::cout << "foo()\n"; }
};
int main() {
foo arr[5] = {};
}
前一段时间was posted提供了更为广泛的不同可能性aib。
答案 1 :(得分:2)
从C ++规范,&#34;聚合初始化&#34; (8.5.1):
如果列表中的initializer-clause少于聚合中的成员,那么未显式初始化的每个成员都应从空的初始化列表中初始化。
因此,不在初始值设定项列表中的每个char
都会初始化为char()
0
。
在C ++ 11中,您可以输入:
char a[10] = {};
char b[10]{};
某些旧的编译器(或者它在C中)可能要求您添加至少一个成员:
char a[10] = {0};
当然,如果数组具有静态生命周期(全局或静态变量),那么如果没有初始化器,它将被初始化为零:
char global_array[10];
我发现它令人困惑,所以我更喜欢添加= {}
。
关于尾随逗号,如果您执行以下操作,则非常有用:
char a[] = {
1,
2,
3,
};
因此,您不会为最后一行制作特殊情况,并且您可以更轻松地复制和粘贴以及差异。在你的具体情况下是没用的:
char a[10] = {0,};
那个逗号什么都不做,而且很难看,所以我不会写它。
答案 2 :(得分:1)
我更喜欢这个,因为它简单而明确:
char myArray1[10] = { 0 };