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.
()
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 {}
.
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.
Tags und Links c++ c++11 constructor delegation