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
428 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!

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