Heim >Backend-Entwicklung >C++ >Warum wird die Punktnotationsinitialisierung für Strukturen in C nicht unterstützt?
C-Strukturinitialisierung: Ein alternativer Ansatz
In C ist es im Gegensatz zu C nicht möglich, Strukturen mit der unten gezeigten Punktnotation zu initialisieren:
<code class="c++">struct address { int street_no; char *street_name; char *city; char *prov; char *postal_code; }; // Invalid C++ syntax address temp_address = { .city = "Hamilton", .prov = "Ontario" };</code>
Diese Abfrage wirft mehrere Fragen auf:
Technische und praktische Gründe
Technisch gesehen gibt es keine zugrunde liegende Einschränkung, die dies verhindert Implementierung der Punktnotationsinitialisierung für Strukturen in C. Das C-Standards-Komitee hat sich jedoch aus mehreren praktischen Gründen dafür entschieden, diese Funktion nicht aufzunehmen:
Alternative Ansätze für die Lesbarkeit
Um die Lesbarkeit zu verbessern, ziehen Sie die folgenden Alternativen in Betracht:
<code class="c++">address temp_address = { 0, // street_no nullptr, // street_name "Hamilton", // city "Ontario", // prov nullptr, // postal_code };</code>
<code class="c++">struct address { address(int sn, char* stn, char* c, char* p, char* pc): street_no(sn), street_name(stn), city(c), prov(p), postal_code(pc) {} int street_no; char *street_name; char *city; char *prov; char *postal_code; }; address temp_address(0, nullptr, "Hamilton", "Ontario", nullptr);</code>
Diese Alternativen bieten eine explizite und lesbare Initialisierung unter Einhaltung der Typsicherheits- und Konsistenzprinzipien von C.
Das obige ist der detaillierte Inhalt vonWarum wird die Punktnotationsinitialisierung für Strukturen in C nicht unterstützt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!