Maison >développement back-end >C++ >« i = i 1 » est-il légalement défini dans C 17 ?
Légalité de i = i 1 en C 17
C 17 a introduit un changement subtil mais significatif qui a légalisé l'expression i = i 1 ; , ce qui était un comportement auparavant indéfini en C 11.
Avant C 17
En C 11, l'ordre d'évaluation d'une expression d'affectation était spécifié comme suit :
Dans le cas de i = i 1;, cela signifiait que l'effet secondaire de l'incrémentation de i à l'aide de l'opérateur suffixe pouvait se produire avant ou après l'affectation. Ce manque de séquençage a conduit à un comportement indéfini.
Modifications apportées au C 17
C 17 a introduit une phrase supplémentaire à la spécification de l'opérateur d'affectation : "L'opérande de droite est séquencé avant l'opérande de gauche. Cet ajout apparemment inoffensif a des implications considérables.
En séquençant le RHS avant le LHS, C 17 garantit désormais que tous les effets secondaires du RHS se produiront avant l'affectation elle-même. Cela isole efficacement l'action d'affectation de tout comportement potentiel non défini.
Réécriture de l'exemple
Pour illustrer ce changement, décomposons l'évaluation de i = i 1 ; en C 17 :
Calcul de la valeur de l'opérande droit (RHS) : i 1
Séquençage du RHS avant LHS :
Calcul de la valeur de l'opérande gauche (LHS) : i
Affectation :
En veillant à ce que tous les effets secondaires dans les RHS précèdent l'affectation, C 17 élimine définitivement la possibilité d'un comportement indéfini dans de telles expressions.
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!