C++ named requirements: DefaultConstructible
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Spécifie qu'une instance du type peut être construite par défaut.
Table des matières |
Exigences
Le type
T
satisfait
DefaultConstructible
si toutes les déclarations et expressions suivantes sont valides et ont leurs effets spécifiés :
| Expression/Instruction | Postcondition |
|---|---|
| T u ; | L'objet u est initialisé par défaut . |
| T u { } ; | L'objet u est initialisé par valeur ou initialisé agrégat . |
|
T
(
)
T { } |
Un objet temporaire de type
T
est
initialisé par valeur
ou
initialisé agrégat
.
|
Notes
Pour les objets de type classe non-agrégat, un constructeur par défaut public doit être défini (soit défini par l'utilisateur, soit implicitement défini) pour satisfaire DefaultConstructible .
Les objets non constants de type objet non-classe sont toujours DefaultConstructible .
Les types non-classes constants ne sont pas DefaultConstructible .
Les types agrégés constants ne sont pas DefaultConstructible si l'un de leurs membres est un objet de type non-classe.
Les types non-objets (types de fonctions, types de références, et le type void (éventuellement qualifié cv)) ainsi que les types const non-objets ne sont jamais DefaultConstructible .
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | S'applique à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 724 | C++98 | les exigences de DefaultConstructible étaient manquantes | ajoutées |
| LWG 2170 | C++98 |
l'initialisation d'un objet d'un type
DefaultConstructible
avec un
initialiseur vide ne pouvait résulter qu'en une initialisation par valeur |
peut également conduire à
une initialisation agrégée |
Voir aussi
|
(C++11)
(C++11)
(C++11)
|
vérifie si un type a un constructeur par défaut
(modèle de classe) |
|
(C++20)
|
spécifie qu'un objet d'un type peut être construit par défaut
(concept) |