Verwenden list-Initialisierung, wenn die Liste ist generisch und Sie könnten einen anderen Behälter, wie ein Array, ein Aggregat oder ein vector
, ohne ihren Sinn zu ändern viel zu ersetzen.
Wenn Sie eine bestimmte Klasse mit Argumenten für einen bestimmten Konstruktor erstellen, sind altmodische Parens besser geeignet. den Bruchteil einer Gleitkommazahl oder die hohe Bits
Ein einzigartiges Merkmal der Initialisierung mit einer verspannt-init-Liste ist, dass es nicht Verengung Konvertierungen erlaubt, die numerischen Daten verloren beispielsweise wird die dazu führen könnte, von einem long
. Dies hilft, Fehler zu markieren (oder zu verhindern), die sich aus der Ersetzung von z.B. ein engerer Array-Typ beim Code-Refactoring.
Ebenso ist der andere Fall, in dem x{ y }
geeignet ist, wenn Sie eine numerische Konvertierung durchführen, die nicht verlustreich ist. x(y)
wird wirklich versuchen, die Umwandlung zu machen, sogar auf eine reinterpret_cast
zurückgreifen, und sollte im Allgemeinen vermieden werden.
Die Terminologie "einheitliche Initialisierung" ist ein bisschen optimistisch, und es erscheint nicht im Standard. Es ist nicht für alle Fälle geeignet. Klammern geben im Allgemeinen Listen an, daher wird sie korrekt als Listeninitialisierung bezeichnet. Und dann sollte es benutzt werden.
Nein, das ist ein "warum" und das ist ein "wann". Ernsthaft Leute. – Potatoswatter
@Potatoswatter http://StackOverflow.com/Questions/1863784/Uniform-Initialization-in-C0x-When-To-use-inste-of-rq=1 etc. – Rapptz
@Rapptz OK, jetzt finden Sie einen mit Antworten, die machen Sinn, oder sind besser als die, die ich hier hinzugefügt habe :) – Potatoswatter