ist diese Form der Initialisierung eines Arrays auf alle Nullen
char myarray[ARRAY_SIZE] = {0} von allen Compilern unterstützt? ,
Wenn ja, gibt es eine ähnliche Syntax wie bei anderen Typen? zum Beispiel
bool myBoolArray[ARRAY_SIZE] = {false}
ist diese Form der Initialisierung eines Arrays auf alle Nullen
char myarray[ARRAY_SIZE] = {0} von allen Compilern unterstützt? ,
Wenn ja, gibt es eine ähnliche Syntax wie bei anderen Typen? zum Beispiel
bool myBoolArray[ARRAY_SIZE] = {false}
int a[10] = { 1, 2, 3 };wird eingestellt a[3]..a[9]auf 0( „implizit das gleiche wie Objekte initialisiert , die statische Speicherdauer haben“). Gilt das für C ++?
falseist nicht dasselbe wie 0, aber in {0}0 wird in konvertiert false, und in (für C ++) müssen {}Sie sich nicht einmal um Konvertierungen kümmern: Es wird auf falseoder 0oder Nullzeiger oder einen anderen typsensitiven Standard initialisiert .
Antworten:
Ja, diese Form der Initialisierung wird von allen C ++ - Compilern unterstützt. Es ist Teil der C ++ - Sprache. Tatsächlich ist es eine Redewendung, die aus der C-Sprache zu C ++ kam. In der Sprache C = { 0 }ist ein idiomatischer universeller Nullinitialisierer . Dies ist auch in C ++ fast der Fall.
Da dieser Initializer universell ist, boolbenötigen Sie für Arrays keine andere "Syntax". 0funktioniert also auch als Initialisierer für den boolTyp
bool myBoolArray[ARRAY_SIZE] = { 0 };
wird garantiert, um das gesamte Array mit zu initialisieren false. Ebenso gut wie
char* myPtrArray[ARRAY_SIZE] = { 0 };
Es wird garantiert, dass das gesamte Array mit Nullzeigern vom Typ initialisiert wird char *.
Wenn Sie glauben, dass es die Lesbarkeit verbessert, können Sie es auf jeden Fall verwenden
bool myBoolArray[ARRAY_SIZE] = { false };
char* myPtrArray[ARRAY_SIZE] = { nullptr };
Aber der Punkt ist, dass die = { 0 }Variante genau das gleiche Ergebnis liefert .
In C ++ = { 0 }funktioniert dies jedoch möglicherweise nicht für alle Typen, z. B. Aufzählungstypen, die nicht mit Integral initialisiert werden können 0. C ++ unterstützt jedoch die kürzere Form
T myArray[ARRAY_SIZE] = {};
dh nur ein leeres Paar {}. Dadurch wird ein Array eines beliebigen Typs standardmäßig initialisiert (vorausgesetzt, die Elemente erlauben eine Standardinitialisierung). Dies bedeutet, dass für grundlegende (skalare) Typen das gesamte Array ordnungsgemäß auf Null initialisiert wird.
bool myBoolArray[ARRAY_SIZE] = { false };das Array auf false initialisiert, aber wenn ich schreibe, wird bool myBoolArray[ARRAY_SIZE] = { true };nur das erste Element auf true gesetzt, während alles andere auf false gesetzt ist. Irgendeine Erklärung?
bool, wird der Rest für Sie mit Null initialisiert. So ist es nun einmal.
bool myBoolArray[ARRAY_SIZE];enthält das Array zu Recht zufällige Werte, daher hätte ich nicht erwartet, dass eine Initialisierung ein Array mit anderen Werten zurückgeben könnte. Das ist alles.
Beachten Sie, dass das '=' in der universellen Initialisierungssyntax von C ++ 11 optional ist und allgemein als besserer Schreibstil angesehen wird:
char myarray[ARRAY_SIZE] {0}
Ja, ich glaube, es sollte funktionieren und es kann auch auf andere Datentypen angewendet werden.
Wenn für Klassenarrays weniger Elemente in der Initialisierungsliste als Elemente im Array enthalten sind, wird der Standardkonstruktor für die verbleibenden Elemente verwendet. Wenn für die Klasse kein Standardkonstruktor definiert ist, muss die Initialisiererliste vollständig sein, dh für jedes Element im Array muss ein Initialisierer vorhanden sein.
Sie können das Array in C ++ auf diese Weise deklarieren. Wenn Sie die Arraygröße kennen, sollten Sie das Array für
Folgendes deklarieren: Ganzzahl: int myArray[array_size];
Double: double myArray[array_size];
Zeichen und Zeichenfolge: char myStringArray[array_size];Der Unterschied zwischen Zeichen und Zeichenfolge ist wie folgt
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
Wenn Sie die Größe des Arrays nicht kennen, sollten Sie das Array wie folgt leer lassen.
ganze Zahl: int myArray[array_size];
Doppelt: double myArray[array_size];
falseist dasselbe wie0(sonstif(false)würde es nicht als falsch bewertet), also wird das, was Sie haben, wahrscheinlich auf 99% der Compiler funktionieren. Ich kann mir über die anderen 1% nicht sicher sein, bis wir den Standard zitieren.