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!