richtig, würde der ehemalige box a = { { 1 } }
verwenden, so dass Sie einen Satz von Klammern für jedes Aggregat haben. Der äußere Satz von Klammern ist für die Struktur und der innere Satz ist für das Array. Die Sprache erlaubt Ihnen jedoch, innere Klammern wegzulassen.
In letzterem gibt es keine inneren Klammern, die weggelassen werden müssen. Sie dürfen äußere Klammern nicht weglassen; Sie müssen mindestens eine Reihe von geschweiften Klammern haben, um eine Liste von Initialisierern für ein Aggregat zu unterscheiden. In gewissem Sinne sagen die geschweiften Klammern "Hier ist eine Liste von Dingen in das Aggregat zu setzen." Wenn Sie box b = 2
schreiben, weiß der Compiler nicht, dass Sie 2
innerhalb das Aggregat setzen möchten. Es sieht stattdessen so aus, als ob Sie versuchen, das Objekt b
(statt eines Teils davon) zu 2
zu initialisieren. Der Compiler versucht also, einen Konstruktor oder eine Konvertierung zu finden, die eine 2
in eine box
ändert. Wenn dies fehlschlägt, erhalten Sie einen Fehler.
sogar wir dürfen int zu deklarieren als: 'int i = {10};' –
@GrijeshChauhan: Ich habe das weggelassen, weil es nicht relevant ist und die Diskussion erschwert. Die Frage ist, warum können wir Klammern nicht weglassen, nicht warum können wir sie hinzufügen. Und es ist ein Sonderfall für Skalare, dass die Sprachspezifikation separat behandelt, nicht ein Teil der Regeln für Aggregate. –
Danke Grijesh, das wusste ich nicht! –