Jest to zgodne ze standardem (wszystkie cytaty z N3337).
to inicjowanie listy.
[dcl.init.list]/1:
Lista inicjalizacja jest inicjalizacja obiektu lub odniesienia jest usztywnione inicjalizacji-list.Such inicjator jest nazwie listy inicjator, i oddzielonych odstępami inicjator-klauzule listy nazywane są elementami listy inicjalizacyjnej . Lista inicjalizatorów może być pusta. [...]
Stosowana definicji listy inicjalizacji:
[dcl.init.list]/3:
Lista inicjalizacja obiektu lub odniesienia do typu T jest zdefiniowany następująco:
- [wiele niż zastosowanie zasady]
- W przeciwnym razie, jeśli lista inicjalizatorów nie ma elementów, obiekt jest inicjowany wartością.
tak, aby utworzyć na typy wbudowane jest wartości inicjalizacji:
[dcl.init]/7:
do wartości inicjalizacji obiekt typu T oznacza
- [non obowiązujące zasady]
- w przeciwnym razie obiekt jest inicjowany od zera.
Więc teraz szukamy zero inicjalizacji (tak, C++ ma dużo rodzajów inicjalizacji):
[dcl.init]/5:
zero inicjalizacji obiektu lub odniesienie typu T oznacza:
- jeśli
T
jest typem skalarnym (3.9), obiekt jest ustawiony na wartość 0 (zero), podjęte jako integralnej stałej ekspresji, w przeliczeniu na T;
- [...]
Yay, ponieważ typy arytmetyczne są typy skalarne ([basic.types]/9
jeśli nie ufasz mi), obie te formy zainicjować ich obiektów z 0
.
Zawsze ciężko jest konkurować (godziny, kiedy śpisz? ;) ... Dzięki za wspaniałą demonstrację używania standardu! –