Maison > développement back-end > C++ > Est-ce que c'est cout

Est-ce que c'est cout

Barbara Streisand
Libérer: 2024-12-15 02:17:09
original
1000 Les gens l'ont consulté

Is `cout

Dévoilement de l'énigme du « cout << a << a » : comportement indéfini ou 01 prédestiné ?

Dans une interview récente, une énigme de codage énigmatique fait surface :

int a = 0;
cout << a++ << a;
Copier après la connexion

Avec des options tentantes parmi lesquelles choisir, dont 10, 01 et le mystérieux « comportement indéfini », la personne interrogée a sélectionné avec confiance 01, citant sa compréhension des points de séquence. Cependant, la réponse de l'intervieweur a été accueillie avec étonnement : la bonne réponse était, étonnamment, indéfinie.

Explorer un territoire non défini

Les points de séquence garantissent généralement l'achèvement des effets secondaires avant passer aux évaluations ultérieures. Curieusement, la déclaration en question ne possède aucun point de séquence entre les évaluations des arguments. Cela signifie que l'argument "a" peut être calculé avant ou après l'argument "cout << a ." Cette ambiguïté rend le résultat imprévisible, d'où la perception d'un comportement indéfini.

Une lueur d'espoir en C 17

Le paysage du codage a été transformé en C 17, où les règles régissant l'évaluation de l'expression ont été révisées. Les dernières directives stipulent explicitement que dans les expressions d'opérateur de décalage, tous les calculs et effets secondaires du premier argument ("E1") sont séquencés avant ceux du deuxième argument ("E2").

Cet ajustement crucial impose le extrait de code en question vers la sortie 01. Le comportement insaisissable et indéfini a été dissipé, remplacé par la certitude d'un résultat prédéterminé.

Une plongée plus profonde dans les braises de P0145R3

Pour ceux qui recherchent une compréhension plus complète, le document technique P0145R3 : Affiner l'ordre d'évaluation de l'expression pour le C idiomatique plonge dans les détails complexes de l'ordre d'évaluation de l'expression révisé, fournissant un aperçu approfondi de l'évolution du paradigme de codage C.

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