Maison >développement back-end >C++ >Pourquoi les fonctions supprimées C 11 participent-elles toujours à la résolution des surcharges ?

Pourquoi les fonctions supprimées C 11 participent-elles toujours à la résolution des surcharges ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-19 12:40:09506parcourir

Why Do C  11 Deleted Functions Still Participate in Overload Resolution?

Pourquoi les fonctions supprimées C 11 participent à la résolution des surcharges

C 11 a introduit la syntaxe = delete pour empêcher l'invocation de certaines surcharges de fonctions avec types de paramètres spécifiques. Ce comportement peut sembler inhabituel, car on pourrait s'attendre à ce que les fonctions supprimées soient entièrement supprimées lors de la résolution de la surcharge. Cependant, cette décision de conception s'explique par des raisons spécifiques.

Prévenir les conversions implicites

L'un des principaux objectifs de = delete est d'interdire l'utilisation de conversions implicites dans certains scénarios. Lorsqu'une fonction avec des surcharges supprimées participe à la résolution des surcharges, elle garantit que le compilateur sélectionnera une correspondance exacte ou signalera une erreur. Cela empêche l'utilisation de conversions implicites pour appeler par inadvertance une surcharge supprimée.

Considérez l'exemple ci-dessous :

struct onlydouble {
  onlydouble(std::intmax_t) = delete; // Prevent implicit conversion from integer
  onlydouble(double);
};

Si la surcharge supprimée était entièrement supprimée de la considération, le code suivant serait autorisé :

onlydouble val(20);

Le compilateur convertirait implicitement le littéral entier en double et sélectionnerait la surcharge non supprimée. Cependant, avec les surcharges supprimées participant à la résolution de la surcharge, le compilateur rejette le code car il identifie la surcharge supprimée comme une correspondance exacte pour un argument littéral entier.

Syntaxe spéciale vs "Cela n'existe pas"

On peut se demander pourquoi C 11 définit = delete comme "J'interdis cela" plutôt que "cela n'existe pas". La réponse réside dans l’absence de besoin d’une grammaire explicite pour représenter la non-existence. Les identifiants non définis et les fonctions membres spéciales manquantes véhiculent implicitement le concept de « cela n'existe pas ».

Conclusion

Les fonctions supprimées C 11 participent à la résolution des surcharges pour éviter les erreurs implicites. conversions et imposer l’utilisation de certains types de paramètres. Cette fonctionnalité de conception permet un contrôle précis sur l'invocation de surcharges de fonctions, offrant des avantages dans les scénarios où les conversions implicites ne sont pas souhaitables ou conduisent à des ambiguïtés.

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