Avatar ·

Vorteile der Listeninitialisierung (geschweifte Klammern) in C++11 und neuer

Hallo zusammen! Ich habe angefangen, C++11 zu lernen und bin auf eine neue Funktion gestoßen – die Initialisierung mit geschweiften Klammern (list initialization). Zum Beispiel:\n\n```cpp\nstd::vector v = {1, 2, 3};\nint x{0};\n```\n\nEs scheint alles zu funktionieren, aber ich verstehe nicht, wozu das gut ist, wenn es doch die gute alte Initialisierung mit runden Klammern oder dem Zuweisungsoperator gibt. Mir kommt es wie syntaktischer Zucker vor.\n\nAber ich habe gehört, dass geschweifte Klammern bestimmte Probleme lösen. Zum Beispiel habe ich gelesen, dass sie narrowing conversions verhindern. Aber was ist das? Und was sind die weiteren Vorteile?\n\nIch habe ein konkretes Beispiel, das mich verwirrt:\n\n```cpp\nint a = 3.14; // a == 3, der Nachkommateil geht einfach verloren\nint b(3.14); // dasselbe\nint c{3.14}; // Compiler-Fehler! Warum?\n```\n\nIch versteh