Co oznaczają następujące frazy w C ++:
inicjalizacja zerowa,
domyślna inicjalizacja oraz
inicjalizacja wartości
Co powinien wiedzieć o nich programista C ++?
c++
initialization
c++-faq
Rachunek
źródło
źródło
Odpowiedzi:
Należy zdać sobie sprawę z tego, że inicjalizacja wartości jest nowa w standardzie C ++ 2003 - nie istnieje w oryginalnym standardzie z 1998 roku (myślę, że może to być jedyna różnica, która jest czymś więcej niż wyjaśnieniem). Zobacz odpowiedź Kirilla V. Lyadvinsky'ego na definicje prosto ze standardu.
Zobacz poprzednią odpowiedź na temat zachowania,
operator new
aby uzyskać szczegółowe informacje na temat różnych zachowań tego typu inicjowania i kiedy się uruchamiają (i kiedy różnią się od c ++ 98 do C ++ 03):Głównym punktem odpowiedzi jest:
Mówiąc najprościej, jest to dość skomplikowane i kiedy różne metody są subtelne.
Należy z pewnością pamiętać, że MSVC przestrzega zasad C ++ 98, nawet w VS 2008 (VC 9 lub cl.exe wersja 15.x).
Poniższy fragment pokazuje, że MSVC i Digital Mars przestrzegają zasad C ++ 98, podczas gdy GCC 3.4.5 i Comeau przestrzegają zasad C ++ 03:
źródło
int
, alem()
w trzecim wierszu wartość inicjuje m. Ważne, jeśli zmieniszint m;
naB m;
. :)A
iC
nie są używane w tym przykładzie (zostały przeniesione z innej połączonej odpowiedzi). Mimo że C ++ 98 i C ++ 03 używają innej terminologii przy opisywaniu sposobuA
iC
budowy, wynik jest taki sam w obu standardach.struct B
Powoduje tylko inne zachowanie.struct C { C() : m() {}; ~C(); B m; };
, to będziesz miećm.m
0. Ale jeśli byłaby to inicjalizacja domyślnam
tak jak mówisz C ++ 03, tom.m
nie byłaby inicjowana jak w C ++ 98.C ++ 03 Standard 8.5 / 5:
źródło