Maison > développement back-end > C++ > Pourquoi \'i = i 1;\' est-il devenu une opération légitime dans C 17 ?

Pourquoi \'i = i 1;\' est-il devenu une opération légitime dans C 17 ?

Susan Sarandon
Libérer: 2024-10-29 03:19:02
original
1071 Les gens l'ont consulté

Why Did

Pourquoi i = i 1; Devenu légal en C 17

En C 11, l'extrait de code "i = i 1;" invoqué un comportement indéfini. Cependant, dans la C 17, ce code est devenu légalement acceptable. Ce changement découle des garanties de séquençage améliorées introduites dans C 17.

Selon la norme C 11 [N3337 basic.exec], le séquençage des effets secondaires n'est pas séquencé sauf indication contraire explicite. Dans l'exemple de code, l'opérateur d'affectation (=) et l'opérateur d'incrémentation postfixe ( ) ont tous deux des effets secondaires qui peuvent conduire à un comportement indéfini s'ils ne sont pas correctement séquencés.

En C 17, une nouvelle phrase a été ajoutée à [ N4659 expr.ass] qui clarifie les règles de séquençage pour l'opérateur d'affectation :

The right operand is sequenced before the left operand.
Copier après la connexion

Cette instruction supplémentaire garantit que tous les effets secondaires dans l'opérande de droite sont exécutés avant tout effet secondaire dans l'opérande de gauche, y compris l'affectation lui-même.

Dans le cas de "i = i 1;", l'opérande droit (i 1) est constitué de l'opérateur d'incrémentation postfixe (i ) et de la constante 1. Les garanties de séquençage introduites dans C 17 garantissent que l'incrément postfix est effectué et son effet secondaire se produit avant l'exécution de l'affectation. Cela élimine le comportement indéfini qui était présent dans C 11.

Par conséquent, les garanties de séquençage améliorées dans C 17 ont fait "i = i 1;" légal en garantissant que les effets secondaires des opérandes droit et gauche sont correctement séquencés, empêchant ainsi un comportement indéfini.

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