Maison >développement back-end >C++ >Pourquoi `int x = x;` entraîne-t-il un comportement non défini en C ?
Conversion Lvalue en Rvalue et comportement non défini en int x = x ;
Contexte :
Le code C int x = x; initialise une variable x avec sa propre valeur, mais cette valeur n'est pas initialisée pour une variable automatique. Par conséquent, la valeur est indéterminée et un comportement indéfini peut en résulter.
Conversion Lvalue en Rvalue :
Une conversion lvalue en rvalue transforme une lvalue (référence ou objet avec une adresse) en une prvalue (valeur sans adresse). La norme C indique que l'exécution de cette conversion sur une valeur non initialisée entraîne un comportement non défini.
La main droite x subit-elle une conversion de valeur L en valeur R ?
Oui . Bien qu'il se trouve du côté droit de l'affectation, x est toujours une lvalue. L'opérateur d'affectation nécessite une lvalue sur le côté gauche (là où la valeur est stockée) et une prvalue sur le côté droit (la source de la valeur).
Conclusion :
Par conséquent, le x de droite subit une conversion lvalue en rvalue, et comme il fait référence à une valeur non initialisée, le code fourni a indéfini comportement.
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!