2013-04-13 7 views
7

Gemäß dem C++ Standard:C++ Standardlayout und Referenzen

Eine Standard-Layout-Klasse ist eine Klasse, die:

-hat keine nicht-statischen Datenelemente vom Typ nicht-Norm- Layout-Klasse (oder Array solcher Typen) oder Referenz.

Welche Eigenschaft (en) die Referenzen verhindern Klassen mit der Referenz Mitgliedern in der Definition einer Standard-Layout-Klasse enthalten ist?

+0

Vermutlich müssen solche Eigenschaften existieren? Es muss nicht sein ... – Yakk

+0

"Prevent" ist ein starkes Wort. Von einem Gesichtspunkt aus geben Verweise dem Compiler nur eine gute Ausrede, die Struktur als einen abstrakten Datentyp und nicht als einen. Spezifikation des Speicherlayouts. Referenzen brauchen überhaupt keine eigene Speicherung *. – jthill

Antwort

11

Bei einer Standardlayout-Klasse handelt es sich um ein gut definiertes Layout für einen bestimmten Typ in Speicher. In C++ sind Verweise keine Objekte, daher haben sie keinen Speicher, auf den durch ein entsprechendes Programm auf eine genau definierte Weise zugegriffen werden kann, obwohl die Implementierung normalerweise eine Art von implementierungsspezifischem Speicher für sie haben muss.

Aus diesem Grund ist es nicht sinnvoll, Referenzelemente in einem Element zu haben, das ein Standard Layout haben muss.

Es gibt eine nicht-normative Notiz in der Norm im Abschnitt über das Speichermodell C++, die dies erwähnt:

[Anmerkung: Verschiedene Merkmale der Sprache, wie Referenzen und virtuelle Funktionen, könnte beinhalten zusätzliches Speicherorte, die für Programme nicht zugänglich sind, aber von der Implementierung verwaltet werden. Endnote]

+0

Danke für die tolle Antwort: das macht Sinn. – TRISAbits