Maison >développement back-end >C++ >Pourquoi les listes d'initialiseurs désignés ont-elles été exclues de C 11 ?

Pourquoi les listes d'initialiseurs désignés ont-elles été exclues de C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-27 22:46:11229parcourir

Why Were Designated Initializer Lists Excluded from C  11?

Exclusion de liste d'initialiseurs désignés dans C 11

C 11 ne prend pas en charge les listes d'initialiseurs désignés, une fonctionnalité présente dans C99. Cette omission a intrigué certains développeurs, qui se demandent pourquoi une syntaxe aussi pratique n'a pas été incluse dans la nouvelle norme.

Justification

Le comité de la norme C a systématiquement rejeté les propositions visant à incorporer des listes d'initialiseurs désignées dans le langage. Leur justification découle de plusieurs défis inhérents :

Indétermination de l'ordre d'évaluation :

En C99, l'ordre d'évaluation des sous-expressions d'initialisation désignées est séquencé de manière indéterminée. Cela peut conduire à un comportement inattendu, en particulier lorsque l'initialisation implique des fonctions en interaction ou des effets secondaires.

Violation de compatibilité :

Si C devait implémenter des listes d'initialiseurs désignées avec une évaluation indéterminée ordre, cela romprait la compatibilité avec les implémentations C99 existantes, qui fournissent généralement un ordre d'évaluation cohérent.

Faisabilité Préoccupations :

Le comité de normalisation a exprimé à plusieurs reprises des doutes quant à la faisabilité de la mise en œuvre de listes d'initialiseurs désignées d'une manière qui réponde aux exigences strictes en matière de liste d'initialiseurs de C (11.6.4[dcl.init.list] 4).

Limitations du désignateur en C 20

Lorsque les listes d'initialiseurs sont désignées restent exclus des C 11 et C 17, la norme C 20 introduit une prise en charge partielle avec des limitations pour garantir la détermination et la compatibilité. Ces limitations incluent :

  • Seules les données membres déclarées dans l'ordre de leur initialisation peuvent être désignées.
  • Les tableaux et l'initialisation imbriquée ne sont pas pris en charge.
  • Tout ou rien des données membres doivent être initialisées par désignateurs.

Conclusion

L'exclusion des listes d'initialiseurs désignés de C 11 était une décision délibérée du comité standard, motivée par des préoccupations concernant l'indétermination de l'ordre d'évaluation, problèmes de compatibilité et défis de mise en œuvre. Bien qu'une prise en charge limitée ait finalement été ajoutée dans C 20, la norme C continue de se concentrer sur l'application d'un ordre d'initialisation strict et sur l'évitement de comportements imprévisibles susceptibles de compromettre l'exactitude ou la portabilité du programme.

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!

Déclaration:
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