Maison >développement back-end >C++ >Pourquoi `cout
Comportement non défini : Comprendre cout << un &Lt ;&Lt ; a
En C , il est impératif de comprendre la notion de comportement indéfini. Un comportement non défini fait référence à des situations dans lesquelles le comportement du programme n'est pas spécifié par la norme C, ce qui entraîne des résultats imprévisibles.
Considérez l'énoncé suivant :
cout << a++ << a;
Ici, nous avons une séquence d'opérations impliquant l'opérateur d'incrémentation ( ) et l'opérateur d'insertion (<<). Lors de l'application de ces opérations à la variable a, nous rencontrons un comportement indéfini dû à l'absence de points de séquence.
Les points de séquence sont des points spécifiques du code où le compilateur garantit que tous les effets secondaires se sont produits. Cependant, dans l’énoncé ci-dessus, il n’y a aucun point de séquence entre l’évaluation de a et a. Cela signifie que l'ordre dans lequel ces opérations sont effectuées n'est pas spécifié par la norme.
Par conséquent, le résultat de cette instruction peut varier en fonction de l'implémentation. Dans certains cas, la sortie peut être « 01 », tandis que dans d’autres, elle peut être « 10 ». Cependant, la norme ne garantit pas quel cas se produira, ce qui rend le comportement indéfini.
Mise à jour C 17
Il est important de noter que les règles régissant l'évaluation des expressions en C ont été mis à jour en C 17. En C 17, la règle suivante s'applique aux expressions d'opérateur de décalage telles que << et >> :
"Dans une expression d'opérateur de décalage E1<
Cette règle élimine le comportement non défini dans la déclaration d'origine. Dans C 17, l'instruction cout << un &Lt ;&Lt ; un; produira toujours la sortie "01", car les effets secondaires de a (incrémentation de a) sont garantis avant l'évaluation de a.
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!