Maison > développement back-end > C++ > Pourquoi une chaîne littérale déclenche-t-elle la surcharge « bool » lors de la surcharge de fonctions ?

Pourquoi une chaîne littérale déclenche-t-elle la surcharge « bool » lors de la surcharge de fonctions ?

Patricia Arquette
Libérer: 2024-11-02 13:47:30
original
408 Les gens l'ont consulté

Why does a string  literal trigger the `bool` overload in function overloading?

Ambiguïté littérale de chaîne dans la surcharge de fonctions avec bool

Lors de la définition de méthodes surchargées qui acceptent à la fois les arguments bool et std::string, les développeurs peuvent rencontrer comportement inattendu lors de la fourniture de chaînes littérales. Au lieu d'invoquer la surcharge std::string, la surcharge bool est prioritaire.

Pour comprendre ce comportement, considérez la situation suivante :

<code class="cpp">class Output
{
public:
    static void Print(bool value)
    {
        std::cout << value ? "True" : "False";
    }

    static void Print(std::string value)
    {
        std::cout << value;
    }
};

Output::Print("Hello World");</code>
Copier après la connexion

Malgré la fourniture d'un littéral de chaîne, le Print( ) avec la surcharge booléenne est invoquée. En effet, les chaînes littérales en C peuvent être implicitement converties en valeurs booléennes. Plus précisément, "Hello World" est un tableau const char* qui peut être interprété comme un pointeur vers un const char, qui à son tour peut être implicitement converti en booléen. Cette conversion est considérée comme une séquence de conversion standard.

C donne la priorité aux séquences de conversion standard par rapport aux conversions définies par l'utilisateur (par exemple, la conversion de std::string en bool). Selon la norme C (§13.3.3.2/2), une séquence de conversion standard est toujours considérée comme une meilleure séquence de conversion.

Ce comportement peut être modifié en fournissant explicitement un argument std::string au Print( ) méthode :

<code class="cpp">Output::Print(std::string("Hello World"));</code>
Copier après la connexion

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