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

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

Linda Hamilton
Libérer: 2024-12-15 12:36:10
original
126 Les gens l'ont consulté

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

Pourquoi les fonctions supprimées participent à la résolution de surcharge en C 11

En C 11, les fonctions supprimées ne sont pas entièrement effacées mais participent plutôt à la résolution de surcharge. Cette fonctionnalité sert deux objectifs principaux.

Prévenir les conversions implicites

La moitié de l'utilité de la syntaxe "= delete" réside dans l'interdiction aux appelants d'invoquer des fonctions spécifiques avec certains paramètres. genres. Son objectif est d'empêcher les conversions implicites dans des scénarios spécifiques. Pour qu'une surcharge particulière soit interdite, elle doit participer à la résolution de la surcharge.

Assurer l'invocation explicite

Si la syntaxe "= delete" devait effacer complètement la fonction, cela équivaudrait essentiellement à omettre complètement la déclaration. Cela permettrait des scénarios tels que :

onlydouble val(20); // Legal in C++
Copier après la connexion

Le compilateur considérerait tous les constructeurs et identifierait une conversion implicite qui lui permet d'appeler le constructeur destiné aux paramètres doubles.

En revanche, avec "= delete" participant à la résolution de surcharge :

onlydouble val(20); // Error in C++
Copier après la connexion

Le compilateur évalue tous les constructeurs, y compris celui supprimé. Il découvre une correspondance exacte pour le littéral entier et génère une erreur car il a tenté d'invoquer une fonction supprimée.

Clarification du rôle de "= delete"

Le " = delete" signifie "J'interdis cela", et pas simplement "cela n'existe pas". Il s’agit d’une déclaration plus forte avec des implications spécifiques. Nous n'exigeons pas de syntaxe distincte pour "cela n'existe pas" car cela est déjà sous-entendu en omettant la déclaration.

Dans de rares cas, certaines ambiguïtés de règle peuvent survenir en raison de l'absence d'un moyen clair d'indiquer que le le constructeur de copie n’existe pas. Cependant, des constructeurs spéciaux comme le constructeur de copie sont inhérents aux classes. Plutôt que d'indiquer leur inexistence, le souci est de savoir s'il est légal de les invoquer.

Conclusion

Les fonctions supprimées en C 11 participent à la résolution des surcharges pour faciliter effacer les rapports d'erreurs et appliquer l'invocation explicite des fonctions. Cela permet aux développeurs d'éviter les conversions ambiguës et involontaires, garantissant ainsi l'exactitude et la clarté du programme.

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