C 11 führte eine entspannte Definition für POD-Typen (Plain Old Data) ein, bekannt als „Standardlayout“. Diese Definition legt strenge Kriterien fest, die eine Klasse erfüllen muss, um als Standardlayout zu gelten. Einer der überraschenden Aspekte der Definition sind ihre Beschränkungen für Datenelement-Zugriffskontrollen, Datenelemente, die denselben Typ wie Basisklassen haben, und das Vorhandensein mehrerer Datenelemente in konstituierenden Klassen.
Das Zulassen von Datenelementen mit unterschiedlichen Zugriffskontrollen würde die entscheidende Anforderung, dass das erste Element und das vollständige Objekt dieselbe Adresse haben, zunichte machen. Dies ist für die gültige Konvertierung einer Standardlayoutobjektadresse in einen Zeiger auf sein erstes Mitglied erforderlich.
Wenn der erste Wenn das Datenelement und die Basisklasse denselben Typ haben, führt dies zu Mehrdeutigkeiten im Speicherlayout. Implementierungen, die Basisklassen vor abgeleiteten Klassen platzieren, würden ein Füllbyte erfordern, um eine Kollision von Adressen zu verhindern. Dies würde erneut die zuverlässige Konvertierung zwischen der Objektadresse und ihrem ersten Mitgliedszeiger behindern.
Innerhalb einer einzelnen Klasse werden Mitglieder nacheinander in der Deklarationsreihenfolge zugewiesen . Klassenübergreifend gibt das Standardlayout jedoch keine feste Zuordnungsreihenfolge vor. Das Vorhandensein mehrerer Datenelemente in konstituierenden Klassen führt zu Unsicherheit bei der Bestimmung des „ersten“ Elements im Speicher, das für die oben genannte Adresskonvertierung unerlässlich ist.
Das obige ist der detaillierte Inhalt vonWarum erfordert das „Standardlayout' von C 11 strenge Datenelementbeschränkungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!