Notas de C ++: Array Initialization tiene una buena lista sobre la inicialización de arrays. tengo un
int array[100] = {-1};
esperando que esté lleno con -1's pero no, solo el primer valor es y el resto son 0's mezclados con valores aleatorios.
El código
int array[100] = {0};
funciona bien y establece cada elemento en 0.
¿Qué me estoy perdiendo aquí? ¿No se puede inicializar si el valor no es cero?
Y 2: ¿La inicialización predeterminada (como arriba) es más rápida que el ciclo habitual a través de toda la matriz y asigna un valor o hace lo mismo?
{0}
No es un caso especial para estructuras ni matrices. La regla es que los elementos sin inicializador se inicializan como si tuvieran 0
un inicializador. Si hay agregados anidados (p struct x array[100]
. Ej. ), Los inicializadores se aplican a los no agregados en orden "mayor de filas"; Opcionalmente, se pueden omitir llaves para hacer esto. struct x array[100] = { 0 }
es válido en C; y válido en C ++ siempre que el primer miembro de struct X
acepte 0
como inicializador.
{ 0 }
no es especial en C, pero es mucho más difícil definir un tipo de datos que no se pueda inicializar con él, ya que no hay constructores y, por lo tanto, no hay forma de evitar que 0
se conviertan y se asignen implícitamente a algo .