Maison > développement back-end > C++ > Quand les fonctions membres du modèle de classe C sont-elles utilisées par ODR ?

Quand les fonctions membres du modèle de classe C sont-elles utilisées par ODR ?

Barbara Streisand
Libérer: 2024-12-07 13:24:13
original
918 Les gens l'ont consulté

When are C   Class Template Member Functions ODR-Used?

Comprendre l'utilisation de l'ODR en C

Dans le contexte des modèles de classe, le terme « odr-use » a été rencontré. Ce concept joue un rôle crucial dans la compréhension de l'instanciation des fonctions membres au sein des modèles de classe.

Selon le standard C [basic.def.odr], une variable ou une fonction est utilisée par odr si elle est utilisée dans un contexte qui nécessite une véritable définition plutôt qu’une simple déclaration. Cela inclut les cas où la variable ou la fonction est directement référencée ou potentiellement évaluée dans une expression. Cependant, une exception existe pour les objets pouvant participer à des expressions constantes et pour lesquels la conversion lvalue en rvalue est immédiatement appliquée.

Pour les fonctions membres du modèle de classe, la définition devient plus précise : une fonction non surchargée (membre ou autre) qui est référencé dans une expression potentiellement évaluée ou qui fait partie d'un ensemble de candidats de surcharge est utilisé par odr sauf s'il s'agit d'une fonction virtuelle pure et que son nom n'est pas explicitement qualifié.

Cette définition peut soulever des questions sur la façon dont la règle d'utilisation de l'ODR s'applique à plusieurs unités de compilation. Pour clarifier, un modèle de classe est instancié uniquement s'il est nécessaire pour une utilisation ODR dans au moins une unité de compilation. La simple instanciation d'un modèle de classe n'instancie pas automatiquement toutes ses fonctions membres à moins qu'elles ne soient explicitement utilisées par odr.

En résumé, l'utilisation d'ODR est un concept défini dans la norme C pour déterminer quelles entités nécessitent une définition réelle. Il joue un rôle important dans l'instanciation des modèles, les fonctions membres n'étant instanciées que si elles sont utilisées au sein d'une unité de compilation.

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