Comprendre "odr-use" en C
En C , le concept de "règle de définition unique" (ODR) garantit que pour chaque entité déclarée dans plusieurs unités de compilation, il n’existe qu’une seule définition. Cependant, déterminer quand une définition est nécessaire peut prêter à confusion. Le terme « odr-use » entre en jeu dans ce contexte.
Selon le standard C, une variable ou une fonction est odr-used :
Cette définition est un peu abstraite, alors simplifions-la. L'utilisation d'Odr signifie essentiellement qu'une entité est utilisée de telle manière qu'elle doit être définie quelque part dans le programme. Cela inclut l'utilisation réelle, comme appeler une fonction ou accéder à une variable, ainsi que l'utilisation potentielle, comme être candidat à la résolution de surcharge.
Dans le cas des fonctions membres d'un modèle de classe, elles sont uniquement instanciées ( et donc définis) s'ils sont utilisés de manière inappropriée. Cela signifie qu'ils doivent être appelés, ou que la classe elle-même doit être instanciée avec cette fonction membre étant virtuelle.
La norme s'appuie sur ce principe pour éviter toute instanciation inutile. Par exemple, la fonction std::list::sort nécessite Operator< sur ses éléments. En déclarant la liste avec un type d'élément qui ne prend pas en charge l'opérateur <, tant que le sort n'est pas appelé, la fonction membre ne sera pas instanciée.
Comprendre odr-use est crucial pour éviter les erreurs liées aux éléments manquants. définitions et définitions multiples dans plusieurs unités de compilation. En suivant ces règles, les programmeurs peuvent écrire du code C robuste et maintenable.
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!