Maison >développement back-end >C++ >Pourquoi ne puis-je pas utiliser les listes d'initialisation sur le côté droit des opérateurs C ?
Surcharge d'opérateurs et listes d'initialisation sur RHS
En programmation C, les listes d'initialisation sont une syntaxe concise pour initialiser des objets agrégés avec une liste d'expressions . Bien que les listes d'initialisation puissent être facilement utilisées dans divers scénarios, leur utilisation sur le côté droit (RHS) des opérateurs a été un sujet de discussion.
Pourquoi les listes d'initialisation sont restreintes sur RHS
C 11 n'autorise pas les listes d'initialisation sur le RHS des opérateurs, y compris l'opérateur binaire << utilisé dans votre code. Il y a plusieurs raisons à cette restriction :
Exceptions pour les listes d'initialisation
Malgré la restriction générale sur en utilisant des listes d'initialisation dans les arguments de l'opérateur, C définit des exceptions spécifiques où les listes d'initialisation sont acceptées :
Dans votre code, vous pouvez utiliser une liste d'initialisation comme argument du constructeur bar, qui est appelé dans le ≪≪ opérateur :
foo baz; baz << bar{1, -2, "foo", 4, 5}; // Legal
Raisons de la restriction
La décision de restreindre les listes d'initialiseurs sur le RHS des opérateurs découle de la volonté de maintenir une grammaire cohérente et claire. Autoriser les listes d'initialisation dans tous les contextes aurait introduit une complexité supplémentaire et une ambiguïté potentielle dans le langage.
Comme indiqué dans le document de discussion mentionné dans votre question, l'alternative consistant à autoriser les listes d'initialisation sur le RHS mais pas sur le LHS a été envisagée. trop problématique. Par conséquent, l'approche conservatrice consistant à autoriser les listes d'initialisation uniquement dans des contextes spécifiques a été choisie.
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!