Maison > développement back-end > C++ > Qu'est-ce que l'utilisation de l'ODR en C et quand une définition est-elle requise ?

Qu'est-ce que l'utilisation de l'ODR en C et quand une définition est-elle requise ?

Patricia Arquette
Libérer: 2024-12-06 12:05:15
original
681 Les gens l'ont consulté

What is ODR-Use in C   and When is a Definition Required?

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 :

  • Si son nom apparaît dans un expression potentiellement évaluée et n'est pas un objet adapté à l'évaluation d'expression constante.
  • Dans le cas d'une fonction non surchargée, si son nom apparaît dans une expression potentiellement évaluée expression ou dans un ensemble de fonctions candidates sélectionnées par résolution de surcharge.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal