Avantages de l'initialisation par liste (accolades) en C++11 et versions ultérieures
Bonjour à tous ! J'ai commencé à étudier C++11 et je suis tombé sur une nouvelle fonctionnalité — l'initialisation avec des accolades (list initialization). Par exemple :
```cpp
std::vector v = {1, 2, 3};
int x{0};
```
Apparemment, tout fonctionne, mais je ne comprends pas à quoi cela sert, alors qu'il y a la bonne vieille initialisation avec des parenthèses ou l'opérateur d'affectation. Il me semble que c'est juste du sucre syntaxique.
Mais j'ai entendu dire que les accolades résolvent certains problèmes. Par exemple, j'ai lu qu'elles empêchent les conversions rétrécissantes (narrowing conversions). Mais qu'est-ce que c'est ? Et quels sont les autres avantages ?
J'ai un exemple concret qui me trouble :
```cpp
int a = 3.14; // a == 3, on perd simplement la partie fractionnaire
int b(3.14); // pareil
int c{3.14}; // Erreur de compilation ! Pourquoi ?
```
Je comprends que c'est une erreur, mais pourquoi la provoquer ? Peut-être y a-t-il des cas où les accolades se comportent de manière inattendue ? Par exemple, avec des classes qui ont un constructeur prenant un std::initializer_list. Dites-moi,