Heim >Backend-Entwicklung >C++ >Warum gibt es keine von C 11 designierten Initialisierer?

Warum gibt es keine von C 11 designierten Initialisierer?

Linda Hamilton
Linda HamiltonOriginal
2024-12-13 15:18:11419Durchsuche

Why Don't C  11 Designated Initializers Exist?

Festlegung des Fehlens designierter Initialisierer in C 11

Im Bereich der Programmierung fanden designierte Initialisierer im C99-Standard eine herausragende Bedeutung. Diese Initialisierer ermöglichten es Entwicklern, Strukturmitgliedern selektiv Werte zuzuweisen und so die Lesbarkeit und Prägnanz des Codes zu verbessern. Allerdings wurde im C 11-Standard ein merkliches Fehlen dieser Initialisierer festgestellt, was zu Nachforschungen über die Gründe für diese Auslassung führte.

Das C 11-Standardkomitee hat wiederholt über die Einbeziehung ausgewiesener Initialisierer nachgedacht und dabei Vorschläge zur Übernahme erwogen Besonderheit. Der Konsens bleibt jedoch eine klare Ablehnung solcher Vorschläge. Das Komitee ist der Ansicht, dass Bemühungen zur Implementierung bestimmter Initialisierer in der Vergangenheit auf unüberwindbare Herausforderungen gestoßen sind.

Bedenken Sie den folgenden Codeausschnitt in C99:

struct Person
{
    int height;
    int weight;
    int age;
};

int main()
{
    Person p { .age = 18 };
}

Dieser Code weist dem Altersmitglied der Person einen Wert zu struct, während die anderen Mitglieder nicht initialisiert bleiben. C99 erlaubt eine solche selektive Initialisierung, C 11 jedoch nicht.

Einer der Hauptgründe für den Ausschluss bestimmter Initialisierer in C 11 liegt in der unvorhersehbaren Auswertungsreihenfolge der Initialisierer in C99. Der Standard beschreibt diese Reihenfolge vage als „unbestimmt sequenziert“, was Raum für unerwartetes Programmverhalten lässt. Wenn zum Beispiel die Initialisierung der Person-Struktur Funktionsaufrufe mit Nebenwirkungen beinhaltete, könnte die Reihenfolge der Ausführung unbeabsichtigte Konsequenzen haben, die der Compiler nicht unbedingt markieren würde.

Im Gegensatz dazu stellt C strenge Anforderungen an Initialisierer- Listenauswertung, um sicherzustellen, dass Initialisierer in der Reihenfolge ausgeführt werden, in der sie erscheinen. Die Durchsetzung einer solchen Anordnung hätte eine Aufhebung der Kompatibilität mit dem vorherigen C99-Design erfordert, was das Komitee als inakzeptabel erachtete.

Während das Fehlen ausgewiesener Initialisierer in C 11 anfangs möglicherweise Kritik hervorgerufen hat, waren die Einschränkungen, die ihrer Aufnahme in C auferlegt wurden 20 haben Bedenken hinsichtlich unbestimmtem Verhalten angesprochen. Die standardisierte Evaluierungsreihenfolge in C 20 bietet Entwicklern mehr Sicherheit und Kontrolle über den Initialisierungsprozess.

Das obige ist der detaillierte Inhalt vonWarum gibt es keine von C 11 designierten Initialisierer?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn