Was ist der Zweck der verschiedenen Typ-Initialisierung in C ++ und was ist der richtige?
%Vor%int i1 = 1;
Das ist ein guter alter C-Stil. Funktioniert immer noch gut und ist in C ++ konventionell.
int i2(1);
Dies ist C ++ - Stil. Es kam zustande, weil einige Typen mehr als ein Argument für ihren Konstruktor benötigen.
int i3{};
C ++ 11 Stil.
int i4 = {1};
Dies ist nicht üblich.
int i5 = int{1};
Dies ist nicht üblich. Aber es wird aufgrund der neuen "Uniform Initialization Syntax" von C ++ 11 unterstützt.
int i6 = {};
Sie haben nicht nach diesem gefragt, aber es ist auch in C ++ 11 gültig.
int i7{1};
Ein weiterer Bonus, dies ist wahrscheinlich die konventionellste Verwendung der einheitlichen Initialisierungssyntax in C ++ 11.
auto i8 = int{1};
Danke an KerrekSB für diese Abscheulichkeit, die er keinem Geringeren als Herb Sutter schreibt. Das wird euch wahrscheinlich Freunde aus dem "No True Modern C ++" - Camp gewinnen und eure Kollegen verfremden, die mit der ersten Syntax vollkommen zufrieden waren.
TL; DR - Verwenden Sie X a1 {v};
für die Initialisierung.
Um sich von Bjarne Stroustrup selbst zu überzeugen, wird unten direkt von TCPL, vierte Ausgabe, zitiert -
%Vor%Wenn für ein Objekt ein Initialisierer angegeben wird, bestimmt dieser Initialisierer den Anfangswert eines Objekts. Ein Initialisierer kann einen von vier syntaktischen Stilen verwenden:
Davon kann nur der erste in jedem Kontext verwendet werden, und ich empfehle dringend seine Verwendung . Es ist klarer und weniger fehleranfällig als die Alternativen. Allerdings ist die erste Form (für a1 verwendet) in C ++ 11 neu die anderen drei Formen sind, was Sie in älterem Code finden. Die zwei Formen using = sind, was du verwendest C.
Tags und Links c++