Maison >développement back-end >C++ >Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » lorsque je transmets des références constantes statiques à des fonctions ?

Pourquoi est-ce que j'obtiens des erreurs « Référence non définie » lorsque je transmets des références constantes statiques à des fonctions ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 18:46:03648parcourir

Why do I get

Références non définies avec des références de constantes statiques

Lors de l'implémentation d'une fonction avec une référence à une constante statique, telle que const int & a, le compilateur peut rencontrer une erreur « Référence non définie ». Cette erreur vient du fait que, bien que la constante soit déclarée comme statique, elle n'est pas définie dans le contexte où la fonction est appelée.

Selon le standard C (9.4.2/4), une constante Les données membres d'un type intégral const peuvent être initialisées avec un initialiseur constant dans sa déclaration. Cependant, lorsqu'il est utilisé dans un paramètre de fonction, le transmettre par référence constante constitue une « utilisation » (conformément à 3.2/2) et déclenche l'exigence de sa définition dans la portée de l'espace de noms.

Dans l'exemple fourni, le la constante statique kConst est utilisée dans la fonction foo via la ligne foo(kConst). Comme la constante n'est définie nulle part, le compilateur tente de créer une référence à un objet non défini. Pour résoudre ce problème, le développeur doit soit fournir une définition pour kConst, soit transmettre la constante par valeur (forçant la création d'un objet temporaire), comme démontré dans la solution proposée dans l'exemple.

Bien que GCC puisse permettre de transmettre la constante par valeur (via static_cast(kConst)), il adhère strictement à la norme en le passant par référence. Cette erreur sert de rappel pour définir des constantes statiques ou les utiliser par valeur lors du passage à des fonctions qui prennent des références constantes.

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!

Déclaration:
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