Maison > développement back-end > C++ > Comment les fonctions supprimées dans C 11 influencent-elles la résolution de surcharge ?

Comment les fonctions supprimées dans C 11 influencent-elles la résolution de surcharge ?

Mary-Kate Olsen
Libérer: 2024-12-15 15:22:24
original
375 Les gens l'ont consulté

How Do Deleted Functions in C  11 Influence Overload Resolution?

Résolution de surcharge en C 11 avec fonctions supprimées

C 11 permet l'utilisation de la syntaxe = delete pour marquer les fonctions comme "supprimées". " Cette syntaxe empêche le compilateur de générer le corps de la fonction et interdit son invocation directe. Cependant, ces fonctions supprimées participent toujours à la résolution de surcharge, un processus qui détermine la fonction la plus appropriée à appeler en fonction d'un ensemble de paramètres d'entrée.

Pourquoi cette fonctionnalité est-elle utile ? Pourquoi les fonctions supprimées sont-elles masquées au lieu d'être complètement supprimées du code ?

La raison principale est de désactiver des surcharges spécifiques en fonction des types de paramètres. En participant à la résolution des surcharges, les fonctions supprimées empêchent les conversions implicites qui pourraient conduire à un comportement involontaire. Prenons l'exemple suivant :

struct onlydouble {
  onlydouble(std::intmax_t) = delete;
  onlydouble(double);
};
Copier après la connexion

Si delete supprimait entièrement la fonction, la syntaxe = delete serait effectivement équivalente à :

struct onlydouble2 {
  onlydouble2(double);
};
Copier après la connexion

Avec ce changement, le code suivant serait légal :

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

Le compilateur tenterait de convertir implicitement le littéral entier 20 en double avant d'invoquer le constructeur qui prend un double.

En revanche, dans l'exemple original avec le constructeur supprimé, le compilateur détecterait une correspondance exacte entre les paramètres de la fonction (std::intmax_t) et l'argument (20). Il générerait alors une erreur car il a sélectionné une fonction supprimée pour l'invocation.

La syntaxe = delete permet donc un contrôle plus fort sur les fonctions qui sont appelées en fonction des types de paramètres. Il empêche les conversions implicites qui pourraient entraîner des conséquences inattendues.

De plus, le concept « cela n'existe pas » n'est pas nécessaire dans la spécification C car :

  • Une grammaire spéciale existe pour suppression de fonctions ("J'interdis cela")
  • Des fonctions implicitement définies (par exemple, un constructeur de copie) existent par par défaut
  • La résolution de surcharge gère "l'existence" de la fonction en identifiant les discordances ou les ambiguïtés
  • L'objectif principal des fonctions supprimées est de contrôler la résolution de surcharge, plutôt que d'indiquer la non-existence

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