Maison > développement back-end > C++ > le corps du texte

Pourquoi la sortie de plusieurs incréments de publication dans une expression C est-elle imprévisible ?

Mary-Kate Olsen
Libérer: 2024-11-05 21:58:02
original
383 Les gens l'ont consulté

Why is the Output of Multiple Post Increments in a C   Expression Unpredictable?

Comportement de l'incrément de publication en C

En C , l'incrément de publication (par exemple, i ) incrémente une variable mais renvoie la valeur d'origine. Comprendre son comportement est crucial dans les expressions complexes.

Considérez le code suivant :

<code class="cpp">int i = 5;

cout << i++ << i-- << ++i << --i << i << endl;</code>
Copier après la connexion

Cette instruction évalue l'expression i i-- i --i i avant de générer le résultat. Cependant, l'ordre d'évaluation n'est pas défini, ce qui conduit à un résultat imprévisible (par exemple, "45555").

Décomposons la règle des points de séquence :

  • Points de séquence : En C , certains points du code forcent l'évaluation des opérations en attente. Ces points incluent des points-virgules (;), des virgules (,) et la fin de l'instruction.
  • Comportement non défini : Dans le code ci-dessus, il existe des effets secondaires non séquencés sur la variable scalaire i en raison des opérations de post-incrémentation. Cela entraîne un comportement indéfini.

Exemple :

<code class="cpp">int x = 20, y = 35;

x = y++ + y + x++ + y++;</code>
Copier après la connexion

Cette expression est évaluée dans l'ordre suivant :

  1. y : Incrémente y à 36 et renvoie 35 (la valeur d'origine de y).
  2. x : Incrémente x à 21 et renvoie 20 (la valeur d'origine de x).
  3. y : Incrémente y à 37 et renvoie 36 (la valeur originale de y).
  4. x : Incrémente x à 22 et renvoie 21 (la valeur originale de x).

Par conséquent, la valeur finale de x est 126 (35 36 20 21), tandis que y est 37.

Conclusion :

L'incrémentation post en C peut conduire à un comportement indéfini lorsqu'il est utilisé dans des expressions non séquencées. Il est essentiel de comprendre les points de séquence et d'éviter les effets secondaires sur la même variable dans un contexte non séquencé.

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