Verschiedene Arten der Variableninitialisierung

8

Was ist der Zweck der verschiedenen Typ-Initialisierung in C ++ und was ist der richtige?

%Vor%     
quantumbit 11.05.2016, 08:59
quelle

2 Antworten

11

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.

    
John Zwinck 11.05.2016, 09:04
quelle
4

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 -

  

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:

%Vor%
  

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.

    
nightlytrails 11.05.2016 09:14
quelle

Tags und Links