Sí, esta forma de inicialización es compatible con todos los compiladores de C++. Es parte del lenguaje C++. De hecho, es un modismo que vino a C++ del lenguaje C. En el lenguaje C = { 0 }
es un idiomático cero iniciador universal. Esto también es casi el caso en C++.
Dado que este initalizer es universal, para el arreglo bool
realmente no necesita una "sintaxis" diferente. 0
funciona como un inicializador para bool
tipo y, por lo
bool myBoolArray[ARRAY_SIZE] = { 0 };
está garantizada para inicializar la matriz completa con false
. Así como
char* myPtrArray[ARRAY_SIZE] = { 0 };
en garantizada para inicializar toda la matriz con nulos triples de tipo char *
.
Si usted cree que mejora la legibilidad, que sin duda puede utilizar
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
pero el punto es que = { 0 }
variante le da exactamente el mismo resultado.
Sin embargo, en C++ = { 0 }
puede que no funcione para todos los tipos, como tipos enum, por ejemplo, que no pueden inicializarse con integral 0
. Pero C++ apoya la forma más corta
T myArray[ARRAY_SIZE] = {};
es decir, sólo un par vacío de {}
. Esto inicializará por defecto una matriz de cualquier tipo (suponiendo que los elementos permitan la inicialización predeterminada), lo que significa que para los tipos básicos (escalares) la matriz completa se inicializará correctamente.
apuesto buen dinero 'false' es lo mismo que' 0' (de lo contrario, si '(falso)' no se evaluará a falso), así que lo que probablemente funcionará en el 99% de los compiladores. No podemos estar seguros acerca del otro 1% hasta que citemos el estándar. –
Sé que en C, 'int a [10] = {1, 2, 3};' configurará 'a [3] .. a [9]' a '0', (" inicializado implícitamente lo mismo que los objetos que tienen una duración de almacenamiento estática "). ¿Esto es válido para C++? –
Sí, lo hace. Si no fuera cierto para C++ entonces C++ no sería remotamente compatible con C. –