Heim >Backend-Entwicklung >C++ >Warum ermöglichte C 11 die In-Class-Initialisierung für nicht-statische Mitglieder?
C 11 ermöglicht die Initialisierung im Unterricht: Was hat die Änderung motiviert?
In der Zeit vor C 11 erfolgte die Initialisierung im Unterricht auf statische const-Mitglieder beschränkt. Diese Einschränkung wurde auf die Notwendigkeit zurückgeführt, Linker-Komplikationen in Szenarien mit mehreren Übersetzungseinheiten zu vermeiden.
Mit der Einführung von C 11 wurden diese Einschränkungen jedoch gelockert und ermöglichten eine klasseninterne Initialisierung für nicht statische und nicht- const-Mitglieder (§12.6.2/8).
Während die ursprüngliche Begründung für die Einschränkungen gültig bleibt, hat C 11 eine Lösung implementiert, die die Last von Linkern auf verlagert Compiler. Anstatt mehrere Definitionen zuzulassen, übernehmen Compiler jetzt die Initialisierung.
Für nicht statische Mitglieder mit geschweiften Klammern oder Gleichheitsinitialisierern wird die Initialisierung gemäß 8.5 durchgeführt. Andernfalls findet keine Initialisierung statt, wenn es sich um ein Variantenmitglied (9.5) handelt. In allen anderen Fällen wird die Standardinitialisierung (8.5) durchgeführt.
Außerdem können nicht konstante statische Mitglieder, die mit dem constexpr-Bezeichner markiert sind, jetzt in der Klasse initialisiert werden (9.4.2).
Diese Änderung vereinfacht die Codepflege und bietet mehr Flexibilität, führt jedoch zu einer gewissen Komplexität der Programmierregeln. Wenn für einen Member beispielsweise mehrere Initialisierer angegeben sind, wird der initialisierte Wert durch den verwendeten Konstruktor bestimmt. In Fällen, in denen der Standardkonstruktor aufgerufen wird, wird der klasseninterne Initialisierer verwendet. Wenn ein nicht standardmäßiger Konstruktor einen Wert angibt, wird der klasseninterne Initialisierer ignoriert.
Insgesamt spiegelt die Änderung eine stärkere Betonung einer verbesserten Entwicklerergonomie wider, ohne die Zuverlässigkeit des Linkers zu beeinträchtigen. Compiler übernehmen jetzt eine komplexere Rolle, um diese Funktionen zu ermöglichen und gleichzeitig eine saubere Trennung der Belange aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWarum ermöglichte C 11 die In-Class-Initialisierung für nicht-statische Mitglieder?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!