Initialisierung von C 11 in der Klasse: Lockerung der Einschränkungen für nicht statische und nicht konstante Mitglieder
Vor C 11 Initialisierung in der Klasse war auf statische const-Integral- oder Enumerationstyp-Member beschränkt. Der Grund für diese Einschränkung war die Notwendigkeit, eindeutige Definitionen für Objekte über mehrere Übersetzungseinheiten hinweg beizubehalten und gleichzeitig komplizierte Linkerregeln zu vermeiden.
C 11 lockert diese Einschränkungen jedoch und ermöglicht die Initialisierung nicht statischer Mitglieder in der Klasse (§ 12.6.2/8). Dazu gehören nicht-statische Datenelemente mit Klammer-oder-Gleich-Initialisierern und nicht-virtuelle Basisklassen nicht-abstrakter Klassen.
Was hat sich also geändert, um dies zu ermöglichen? Während am Linker keine wesentlichen Änderungen vorgenommen wurden, ist der Compiler komplexer geworden, um die zusätzlichen Verantwortlichkeiten zu bewältigen.
Im Gegensatz zu früheren Versionen von C, die strenge Regeln für mehrere Definitionen erzwangen, verarbeitet der Compiler von C 11 jetzt mehrere Definitionen innerhalb eine Klasse. Anstatt dass der Linker Definitionskonflikte löst, übernimmt der Compiler diese Aufgabe.
Diese Änderung der Verantwortung führt zu mehr Komplexität für Programmierer, die nun potenzielle Konflikte zwischen mehreren Member-Initialisierungen für ein einzelnes Member berücksichtigen müssen. Beispielsweise erfordert eine Klasse mit sowohl einem Mitgliedsinitialisierer als auch einem Konstruktor mit einer spezifischen Initialisierung für dasselbe Mitglied sorgfältige Überlegungen, um zu bestimmen, welche Initialisierung verwendet wird.
Trotz der erhöhten Komplexität sind die Vorteile der klasseninternen Initialisierung vorhanden überwiegen die Herausforderungen. Es ermöglicht einen prägnanteren und aussagekräftigeren Code, reduziert den Boilerplate und macht den Code leichter lesbar und verständlich.
Das obige ist der detaillierte Inhalt vonWie ermöglicht C 11 die klasseninterne Initialisierung nicht statischer und nicht konstanter Mitglieder?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!