Inizializzazione di array C ++

è questa forma di intializzare una matrice su tutti gli 0

char myarray[ARRAY_SIZE] = {0} supportato da tutti i compilatori? ,

in tal caso, esiste una syntax simile ad altri tipi? per esempio

 bool myBoolArray[ARRAY_SIZE] = {false} 

Sì, questa forma di inizializzazione è supportata da tutti i compilatori C ++. Fa parte del linguaggio C ++. In realtà, è un idioma che è venuto a C ++ dal linguaggio C. In linguaggio C = { 0 } è un inizializzatore zero universale idiomatico. Questo è anche quasi il caso in C ++.

Dato che questo initalizer è universale, per l’array bool non hai realmente bisogno di una “syntax” diversa. 0 funziona anche come inizializzatore per il tipo bool , quindi

 bool myBoolArray[ARRAY_SIZE] = { 0 }; 

è garantito per inizializzare l’intero array con false . Così come

 char* myPtrArray[ARRAY_SIZE] = { 0 }; 

in garantito per inizializzare l’intero array con i puntatori nulli di tipo char * .

Se ritieni che migliori la leggibilità, puoi sicuramente usarlo

 bool myBoolArray[ARRAY_SIZE] = { false }; char* myPtrArray[ARRAY_SIZE] = { nullptr }; 

ma il punto è che la variante = { 0 } ti dà esattamente lo stesso risultato.

Tuttavia, in C ++ = { 0 } potrebbe non funzionare per tutti i tipi, come ad esempio i tipi di enum, che non possono essere inizializzati con l’integrale 0 . Ma C ++ supporta la forma più breve

 T myArray[ARRAY_SIZE] = {}; 

cioè solo una coppia vuota di {} . L’impostazione predefinita è l’inizializzazione di un array di qualsiasi tipo (presupponendo che gli elementi consentano l’inizializzazione predefinita), il che significa che per i tipi base (scalari) l’intero array verrà inizializzato correttamente a zero.

Nota che ‘=’ è opzionale nella syntax universale di inizializzazione C ++ 11, ed è generalmente considerato uno stile migliore per scrivere:

 char myarray[ARRAY_SIZE] {0} 

Sì, credo che dovrebbe funzionare e può anche essere applicato ad altri tipi di dati.

Tuttavia, per gli array di classi, se nell’elenco degli inizializzatori vi sono meno elementi rispetto agli elementi dell’array, viene utilizzato il costruttore predefinito per gli elementi rimanenti. Se per la class non è definito alcun costruttore predefinito, l’elenco di inizializzazione deve essere completo, ovvero deve esistere un inizializzatore per ciascun elemento nell’array.

È ansible dichiarare la matrice in C ++ in questi tipi di modi. Se si conosce la dimensione dell’array, è necessario dichiarare l’array per: intero: int myArray[array_size]; Double: double myArray[array_size]; Char e stringa: char myStringArray[array_size]; La differenza tra char e string è la seguente

 char myCharArray[6]={'a','b','c','d','e','f'}; char myStringArray[6]="abcdef"; 

Se non conosci la dimensione della matrice, dovresti lasciare la matrice vuota come segue.

intero: int myArray[array_size];

Double: double myArray[array_size];