Maison > développement back-end > C++ > Pourquoi les listes d'initialisation ne peuvent-elles pas être directement utilisées sur le côté droit des opérateurs C ?

Pourquoi les listes d'initialisation ne peuvent-elles pas être directement utilisées sur le côté droit des opérateurs C ?

Patricia Arquette
Libérer: 2024-12-23 11:14:14
original
349 Les gens l'ont consulté

Why Can't Initializer Lists Be Directly Used on the Right-Hand Side of C   Operators?

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 :

  • Comme arguments des fonctions
  • Dans les expressions en indice
  • À droite de affectations

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});
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal