将数组初始化为0的正确和最简单的语法方法

时间:2014-08-13 09:52:33

标签: c++ arrays

我试图找出将数组初始化为全零的正确方法(即好像你在数组上做了一个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},但我没有找到任何证据确实这是正确的。

3 个答案:

答案 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 };