Hier sind zwei Möglichkeiten, eine Variable in C++ 11 zu initialisieren:Beeinflusst das Gleichheitszeichen die Klammerinitialisierung? z.B. 'T a = {}' vs 'T a {}'
T a {something};
T a = {something};
ich diese beiden in allen Szenarien getestet ich und ich denken konnte, gescheitert, einen Unterschied zu bemerken. This answer legt nahe, dass es einen feinen Unterschied zwischen den beiden ist:
Für Variablen Ich habe nicht viel Aufmerksamkeit zwischen den
T t = { init };
oderT t { init };
Arten zahlen, finde ich den Unterschied gering zu sein und wird im schlimmsten Fall nur zu einer hilfreich Compiler-Nachricht über den Missbrauch eines expliziten Konstruktors.
Also, gibt es einen Unterschied zwischen den beiden?
Does not a = {etwas} auch führt Klammer-elision ermöglicht in eine extra Kopie/Umzug? – gvd
@gvd Nein, hier unterscheiden sich "traditionelle" copy-init und copy-list-init: 'foo f0 = 42;' konvertiert '42' in einen prvalue-temporären 'foo' und initialisiert' f0' mit diesem temporären (über eine möglicherweise entfernte Kopie/move), wobei 'foo f1 = {42};' 'einen Konstruktor von' f1' auswählt, der mit '42' aufgerufen wird (die Kopie + move ctor kann in diesem Fall gelöscht werden). – dyp