2015-11-25 10 views

Odpowiedz

8

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.

+0

Zawsze ciężko jest konkurować (godziny, kiedy śpisz? ;) ... Dzięki za wspaniałą demonstrację używania standardu! –

3

Tak, jest to zagwarantowane przez standard: w rzeczywistości jest to wykonanie value-initialization.

W szczególności, patrz punkt 4) na stronie: stwierdza, że ​​musi być value-initialization:

Wartość inicjalizacji odbywa się w następujących sytuacjach:
...
4) przy Zmienna nazwana (automatyczna, statyczna lub wątkowo-lokalna) jest zadeklarowana za pomocą inicjalizatora składającego się z pary nawiasów klamrowych.

I na tej samej stronie, widać, że efekt value-initialization dla wbudowanych typów jest zainicjować je z 0 (nawiasach kwadratowych są moje):

Skutki inicjalizacji wartości są następujące:
...
4) W przeciwnym razie [jeśli jest to typ inny niż tablicowy], obiekt jest inicjowany zerowo.

1

Formularz int i{}; nazywa się value initialization.

Skrócony:

Skutki inicjalizacji wartości są następujące:
[...]
4) W przeciwnym przypadku [jeżeli T nie jest klasą lub tablicą typu] Celem jest zero inicjowany.

+0

Dzięki. Znalazłem coś w 8.5 Inicjatorach, które wydają się nieco różnić od twojego cytatu. Skąd pochodzi twoja oferta cenowa? – InsideLoop

+0

Ze strony cppreference, którą podłączyłem. Patrząc na N4140 bardzo podobna sekcja pojawia się w [8.5 * initializers *]/8: 'Aby wartość-zainicjować obiekt typu T oznacza: [...]' – melak47

Powiązane problemy