Listes d'initialisation et côté droit des opérateurs
Les listes d'initialisation sont un moyen pratique d'initialiser des variables et des objets, mais leur utilisation est limité sur le côté droit des opérateurs. Cela peut être déroutant, car il semble logique d'autoriser les listes d'initialiseurs dans de tels contextes.
Raisons de la restriction
Selon la norme C, les listes d'initialiseurs ne sont pas prises en compte expressions. Comme les arguments des opérateurs nécessitent généralement des expressions, les listes d'initialiseurs pures sont interdites.
Exceptions
Il existe quelques exceptions qui autorisent l'utilisation de listes d'initialiseur :
Justification
Le comité standard C 11 a décidé de ne pas autoriser les listes d'initialisation sur le côté gauche des opérateurs pour simplifier la mise en œuvre de l'analyseur. Les autoriser sur le côté droit aurait été trop incohérent sans les autoriser également sur le côté gauche.
Alternatives
Heureusement, il existe des alternatives à l'utilisation listes d'initialisation sur le côté droit des opérateurs. Une option consiste à placer la liste d'initialisation entre parenthèses, ce qui la transforme en une expression de référence rvalue :
baz << (std::initializer_list<int>{1, -2, "foo", 4, 5});
Une autre option consiste à créer une variable temporaire du type approprié et à l'initialiser avec la liste d'initialisation :
auto data = bar{1, -2, "foo", 4, 5}; baz << data;
Bien que ces alternatives ne soient pas aussi pratiques que l'utilisation directe des listes d'initialisation, elles fournissent une solution de contournement pour la restriction sur le côté droit de opérateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!