Dies wird durch den Standard angegeben (alle Zitate aus N3337).
T x{};
ist Listeninitialisierung.
[dcl.init.list]/1:
List-Initialisierung ist die Initialisierung eines Objekts oder eine Referenz von einem verspannt-init-list.Such ein Initialisierer wird eine Initialisierer Liste genannt, und die durch Kommata getrennte Initialisierer-Klauseln der Liste werden die Elemente genannt der Initialisierungsliste . Eine Initialisierungsliste ist möglicherweise leer. [...]
Die anwendbare Definition für list-Initialisierung:
[dcl.init.list]/3:
List-Initialisierung eines T-Objekt oder Referenz vom Typ wie folgt definiert ist:
- [eine Menge nicht anwendbar Regeln]
- Andernfalls, wenn die Initialisierungsliste keine Elemente enthält, wird das Objekt initialisiert.
So für das Formular integrierte Typen ist Wert-Initialisierung:
[dcl.init]/7:
Um Wert zu initialisieren bedeutet ein Objekt vom Typ T:
- [nicht- anwendbare Regeln]
- Andernfalls wird das Objekt auf Null initialisiert.
So, jetzt suchen wir Null-Initialisierung (ja, C++ hat eine Menge von Arten der Initialisierung):
[dcl.init]/5:
auf Null initialisieren ein Objekt oder eine Referenz T vom Typ bedeutet:
T
wenn ein Typ Skalar ist (3.9), wird das Objekt auf den Wert 0 (Null) genommen als integraler konstanter Ausdruck, umgewandelt T;
- [...]
Yay, skalare Typen ([basic.types]/9
, wenn Sie mir nicht vertrauen), da arithmetische Typen sind, diese Formen sowohl initialisieren ihre Objekte mit 0
.
Es ist immer schwer zu konkurrieren (in welchen Stunden schläfst du? ;) ... Danke für die tolle Demonstration, wie man den Standard benutzt! –