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

cod*_*der 2 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};
Run Code Online (Sandbox Code Playgroud)

我更喜欢最简单的语法变体......我使用的是{0},但我没有找到任何证明这实际上是正确的.

Kon*_*lph 5

数组中缺少的元素将初始化为0.此外,C++允许您将统一初始化器保留为空.因此,以下工作是最小的,也是最有效的:

T array[N] = {};
Run Code Online (Sandbox Code Playgroud)

值得一提的,这适用于任何类型T它可以是默认构造或者初始化,而不仅仅是内建类型.例如,以下作品,将打印foo五次:

#include <iostream>

struct foo {
    foo() { std::cout << "foo()\n"; }
};

int main() {
    foo arr[5] = {};
}
Run Code Online (Sandbox Code Playgroud)

不久之前,aib 发布了更广泛的不同可能性列表.