"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > `Int x = x;` comportement non défini est-il dû à la conversion LVALUE-RVALUE?

`Int x = x;` comportement non défini est-il dû à la conversion LVALUE-RVALUE?

Publié le 2025-03-22
Parcourir:476

Is `int x = x;` Undefined Behavior Due to Lvalue-to-Rvalue Conversion?

Conversion lvalue-to-rvalue et comportement non défini dans int x = x;

En C, la question de savoir si l'attribution d'une valeur non initialisée constitue un comportement non défini a été un sujet de débat. La norme (3.3.2) déclare que l'initialisation d'une variable avec elle-même, comme dans l'exemple int x = x;, peut conduire à des résultats inattendus.

Le nœud du problème réside dans l'exigence potentielle de la conversion LVALUE-RVALUE dans de telles affectations. Supposons que le x droit est une variable automatique non initialisée avec une valeur indéterminée. Selon la norme (4.1), la réalisation d'une conversion Lvalue-to-Rvalue sur une telle valeur entraîne un comportement non défini. Par exemple, les notes standard selon lesquelles les opérateurs d'affectation intégrés impliquent une conversion LVALUE-RVALUE pour le bon opérande. D'autres dispositions indiquent également que la conversion LVALUE-RVALUE est généralement anticipée, sauf lorsqu'elle est explicitement spécifiée. Les preuves suggèrent que la spécification prévue consiste à s'attendre à des prvalues ​​partout où une valeur est nécessaire. comportement.

Poutenir les preuves

Une preuve supplémentaire découle de la considération du code qui attribue des variables non initialisées avec différents types et différentes affectations. Un comportement incohérent, tel que la prévention de la conversion de la référence sur l'initialisation de la référence mais le permettant sur l'initialisation de l'objet, ajoute de la crédibilité à la vue que la conversion LVALUE-RVALUE est attendue pour le rapport de copie pour l'introduction de l'intérescence. Conversion Lvalue-to-Rvalue. Cela suggère que l'intention d'établir un comportement non défini dans des cas comme int x = x; Cela, à son tour, conduit à un comportement non défini en raison de la nature non initialisée du main droit x. Les incohérences et le besoin de clarification de la norme mettent en évidence l'importance des spécifications détaillées pour les catégories de valeur.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3