C++ named requirements: DefaultConstructible
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gibt an, dass eine Instanz des Typs standardmäßig konstruiert werden kann.
Inhaltsverzeichnis |
Anforderungen
Der Typ
T
erfüllt die Anforderungen von
DefaultConstructible
wenn alle folgenden Aussagen und Ausdrücke gültig sind und ihre spezifizierten Effekte haben:
| Ausdruck/Anweisung | Nachbedingung |
|---|---|
| T u ; | Das Objekt u wird default-initialized . |
| T u { } ; | Das Objekt u wird value-initialized oder aggregate-initialized . |
|
T
(
)
T { } |
Ein temporäres Objekt vom Typ
T
wird
value-initialized
oder
aggregate-initialized
.
|
Hinweise
Für Objekte von Nicht-Aggregat-Klassentyp muss ein öffentlicher default constructor definiert sein (entweder benutzerdefiniert oder implizit definiert), um DefaultConstructible zu erfüllen.
Nicht-konstante Objekte von Nicht-Klassen-Objekttypen sind immer DefaultConstructible .
Konstante Nicht-Klassentypen sind nicht DefaultConstructible .
Konstante Aggregattypen sind nicht DefaultConstructible , wenn eines ihrer Mitglieder ein Objekt eines Nicht-Klassentyps ist.
Nicht-Objekt-Typen (Funktionstypen, Referenztypen und der (möglicherweise cv-qualifizierte) Typ void ) sowie konstante Nicht-Objekt-Typen sind niemals DefaultConstructible .
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 724 | C++98 | die Anforderungen von DefaultConstructible fehlten | hinzugefügt |
| LWG 2170 | C++98 |
die Initialisierung eines Objekts eines
DefaultConstructible
Typs mit einem
leeren Initialisierer konnte nur zur Wertinitialisierung führen |
kann auch zu
Aggregatinitialisierung führen |
Siehe auch
|
(C++11)
(C++11)
(C++11)
|
prüft, ob ein Typ einen Standardkonstruktor besitzt
(Klassen-Template) |
|
(C++20)
|
spezifiziert, dass ein Objekt eines Typs standardkonstruiert werden kann
(Konzept) |