__is_standard_layout
Nach oben zu Typ-Trait-Funktionen (C++11) - Index
Kategorie
Typ-Trait-Funktionen
Syntax
bool __is_standard_layout(typename T)
Gibt true zurück, wenn und nur wenn T ein Standard-Layout-Typ ist.
Fehler, wenn T ein unvollständiger Typ ist.
Standard-Layout-Klassen werden im Abschnitt 9, p 6 des Working Draft beschrieben.
Ein Standard-Layout-Typ ist:
- ein skalarer Typ
- ein Array mit Standard-Layout-Typen
- ein Standard-Layout-Klassentyp:
Eine Standard-Layout-Klasse ist eine Klasse, die:
- keine nicht-statischen Daten-Member außer Standard-Layout-Typen hat
- dieselbe Zugriffssteuerung für alle nicht-statischen Daten-Member (z.B. alle public oder private) hat
- keine Basisklassen außer Standard-Layout-Klassen hat
- keine virtuellen Funktionen und keine virtuellen Basisklassen hat
- nur eine Klasse mit nicht-statischen Daten in dem DAG der Vererbungshierarchie hat
- keine Basisklasse desselben Typs als ersten nicht-statischen Daten-Member hat
Auf Standard-Layout-Typen beziehen sich mehrere spezielle Klauseln im Standard, die sich auf die Codeerzeugung und -optimierung, oder einfach darauf auswirken können, ob bestimmte Konstrukte undefiniert sind. Insbesondere erfordern Standard-Layout-Klassen die leere Basisoptimierung.
Beachten Sie bitte, dass Standard-Layout-Typen eine Generalisierung von PODs im 2003-Standard sind, falls die POD/Standard-Layout-Überarbeitung noch nicht ausgeführt wurde, wenn diese Typfunktion eingeführt wird.