Maison > développement back-end > C++ > Qu'est-ce que l'utilisation de l'ODR dans les fonctions membres du modèle de classe C ?

Qu'est-ce que l'utilisation de l'ODR dans les fonctions membres du modèle de classe C ?

Linda Hamilton
Libérer: 2024-12-06 11:44:11
original
980 Les gens l'ont consulté

What is ODR-Use in C   Class Template Member Functions?

Comprendre l'utilisation de l'ODR en C

Dans le contexte de la programmation C, le concept « d'utilisation de l'ODR » surgit souvent lors des discussions en classe fonctions membres du modèle.

La règle de définition unique (ODR) garantit qu'il existe une définition unique et cohérente pour chaque entité dans toutes les unités de traduction d'un programme. L'utilisation ODR définit quand une entité doit avoir une définition fournie, par opposition à une simple déclaration.

Selon la norme C, une fonction non surchargée est utilisée par odr si :

  • Son nom apparaît dans une expression potentiellement évaluée.
  • Il fait partie d'un ensemble de fonctions candidates sélectionnées par surcharge résolution.
  • Il s'agit d'une fonction virtuelle non pure.

Utilisation ODR et fonctions des membres du modèle de classe

Pour les membres du modèle de classe fonctions, la règle d'utilisation ODR signifie qu'elles ne seront instanciées que si elles sont :

  • Appelées explicitement.
  • Virtuel et la classe elle-même est instanciée (même si la fonction n'est pas appelée).

Cette règle garantit que les fonctions membres du modèle ne sont instanciées que lorsqu'elles sont réellement nécessaires. Par défaut, le compilateur n'instanciera pas les fonctions membres inutilisées, ce qui permettra d'économiser du temps de compilation.

Utilisation ODR et plusieurs unités de compilation

Lors de l'utilisation de plusieurs unités de compilation, le compilateur doit assurez-vous que toutes les entités utilisées par odr sont définies exactement une fois. Il y parvient grâce au concept de « modèles principaux ». Un modèle principal est la première instanciation d'un modèle dans une unité de traduction. Toutes les instanciations de modèles ultérieures dans d'autres unités de traduction sont considérées comme des instanciations secondaires.

Le modèle principal est chargé de fournir la définition des entités utilisées par odr. Si une fonction membre est utilisée par l'ODR mais n'est pas appelée dans le modèle principal, elle doit quand même être déclarée avec une définition pour satisfaire l'ODR.

Instanciation de toutes les fonctions membres

L'instanciation explicite d'un modèle de classe garantit l'instanciation de toutes les fonctions membres, y compris les fonctions utilisées par odr qui ne sont pas appelées. Cela garantit que la définition complète est disponible pour toutes les unités de compilation, évitant ainsi d'éventuelles erreurs de liaison. Cependant, il n'est pas toujours nécessaire ou efficace d'instancier les fonctions membres inutilisées.

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