Delegieren von Konstruktoren in C ++ () oder {}

8

Ich habe diesen Link von Stroustrup mit dem folgenden Code gelesen:

%Vor%

Meine Frage betrifft die Zeile:

X() X{42}{}

Gibt es Unterschiede zwischen Klammern und geschweiften Klammern?
Wenn es keine Unterschiede gibt, kann ich geschweifte Klammern auch in anderen Funktionsaufrufen verwenden? Oder ist es nur in der Konstruktordelegierung? Und schließlich Warum sollten wir beide Syntaxen haben? Es ist ein wenig ambig.

    
Govan 17.10.2015, 10:31
quelle

2 Antworten

7

() verwendet die Wertinitialisierung , wenn die Klammern leer sind, oder direkte Initialisierung wenn nicht leer.

{} verwendet Listeninitialisierung , was bedeutet, dass Wert Initialisierung wenn die Klammern leer sind, oder aggregierte Initialisierung , wenn das initialisierte Objekt ein Aggregat ist.

Da Ihre X eine einfache int ist, gibt es keinen Unterschied zwischen der Initialisierung mit () oder {} .

    
emlai 17.10.2015, 10:36
quelle
0

Initialisierungswerte können in Klammern oder geschweiften Klammern angegeben werden.

Die Klammerinitialisierung wurde mit C ++ 11 eingeführt und soll eine "einheitliche Initialisierung" sein, die für alle nicht statischen Variablen verwendet werden kann.

Klammern können anstelle von Klammern oder Gleichheitszeichen verwendet werden und wurden eingeführt, um die Einheitlichkeit zu erhöhen und die Verwirrung zu reduzieren.

Es ist nur ein syntaktisches Konstrukt und führt nicht zu Leistungsvorteilen oder Strafen.

    
dspfnder 17.10.2015 10:46
quelle

Tags und Links