Warum wird die Direktlisteninitialisierung mit auto als schlecht oder nicht bevorzugt betrachtet?

8

Ich habe mir angewöhnt, Code mit direkter Listen-Initialisierung wie unten zu schreiben, da es effektiver ist und es sehr nützlich ist, Verengung :

%Vor%

Aber wenn es um den automatischen Spezifizierer geht, habe ich gehört, dass es als schlecht oder nicht bevorzugt gilt, es so zu schreiben, warum ist das so?

    
Andreas DM 27.04.2015, 08:38
quelle

1 Antwort

11

Hier ist ein Beispiel, wo die Verwendung dieser Syntax fehlschlägt:

%Vor%

Sie können erwarten, dass dies in Ordnung ist: b sollte ein Foo sein und an eatFoo übergeben werden. Leider führt dies zu dem folgenden Compiler-Fehler:

%Vor%

Wie Sie sehen, ist b vom Typ std::initializer_list<Foo> . Sicher nicht, was wir in diesem Fall wollen. Wenn wir es in auto b = a ändern, funktioniert das gut. Wenn wir dann auto noch verwenden wollen, aber den Typ explizit angeben, können wir ihn in auto b = Foo{a} ändern und dem Compiler die Kopie überlassen.

    
TartanLlama 27.04.2015, 08:44
quelle