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
Libérer: 2024-12-19 12:40:09
original
469 Les gens l'ont consulté

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);
};
Copier après la connexion

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

onlydouble val(20);
Copier après la connexion

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!

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