这种形式是将数组初始化为全0
char myarray[ARRAY_SIZE] = {0}
所有编译器都支持?,
如果是这样,是否有类似于其他类型的语法?例如
bool myBoolArray[ARRAY_SIZE] = {false}
AnT.. 132
是的,所有C++编译器都支持这种初始化形式.它是C++语言的一部分.实际上,它是从C语言到C++的习惯用语.在C语言中= { 0 }
是一种惯用的通用零初始化器.在C++中也几乎就是这种情况.
由于这个initalizer是通用的,对于bool
数组你不需要一个不同的"语法".0
作为bool
类型的初始化器也是如此
bool myBoolArray[ARRAY_SIZE] = { 0 };
保证用它初始化整个数组false
.以及
char* myPtrArray[ARRAY_SIZE] = { 0 };
保证用类型的空指针初始化整个数组char *
.
如果您认为它提高了可读性,那么您当然可以使用
bool myBoolArray[ARRAY_SIZE] = { false }; char* myPtrArray[ARRAY_SIZE] = { nullptr };
但关键是= { 0 }
变体会给你完全相同的结果.
但是,在C++中= { 0 }
可能不适用于所有类型,例如枚举类型,不能用积分初始化0
.但是C++支持更短的形式
T myArray[ARRAY_SIZE] = {};
即只是一双空的{}
.这将默认初始化任何类型的数组(假设元素允许默认初始化),这意味着对于基本(标量)类型,整个数组将被正确地零初始化.
是的,所有C++编译器都支持这种初始化形式.它是C++语言的一部分.实际上,它是从C语言到C++的习惯用语.在C语言中= { 0 }
是一种惯用的通用零初始化器.在C++中也几乎就是这种情况.
由于这个initalizer是通用的,对于bool
数组你不需要一个不同的"语法".0
作为bool
类型的初始化器也是如此
bool myBoolArray[ARRAY_SIZE] = { 0 };
保证用它初始化整个数组false
.以及
char* myPtrArray[ARRAY_SIZE] = { 0 };
保证用类型的空指针初始化整个数组char *
.
如果您认为它提高了可读性,那么您当然可以使用
bool myBoolArray[ARRAY_SIZE] = { false }; char* myPtrArray[ARRAY_SIZE] = { nullptr };
但关键是= { 0 }
变体会给你完全相同的结果.
但是,在C++中= { 0 }
可能不适用于所有类型,例如枚举类型,不能用积分初始化0
.但是C++支持更短的形式
T myArray[ARRAY_SIZE] = {};
即只是一双空的{}
.这将默认初始化任何类型的数组(假设元素允许默认初始化),这意味着对于基本(标量)类型,整个数组将被正确地零初始化.
请注意,'='在C++ 11通用初始化语法中是可选的,并且它通常被认为是更好的写入样式:
char myarray[ARRAY_SIZE] {0}