Maison > développement back-end > C++ > le corps du texte

Pourquoi mon code C imprime-t-il « Vrai » au lieu de « Hello World » ?

Mary-Kate Olsen
Libérer: 2024-11-03 03:51:02
original
379 Les gens l'ont consulté

Why Does My C   Code Print

Surcharge booléenne de correspondance littérale de chaîne au lieu de std::string

Considérez le code C suivant :

<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;
    }
};</code>
Copier après la connexion

Lorsque vous appelez la méthode comme suit :

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

Vous pourriez être surpris de voir le résultat :

True
Copier après la connexion

Pourquoi la surcharge booléenne de la méthode Print a-t-elle été appelée au lieu du std : :surcharge de chaînes ?

Comprendre le mécanisme de conversion

Les littéraux de chaîne en C, tels que "Hello World", sont stockés sous forme de tableaux de caractères const. Cependant, ils peuvent être implicitement convertis en pointeurs vers des caractères const, qui peuvent ensuite être convertis en bool.

Dans le code fourni, le compilateur préfère la séquence de conversion standard de "Hello World" pour bool plutôt que l'utilisateur. séquence de conversion définie de "Hello World" en std :: string. Cette préférence est basée sur la norme C, qui stipule que les séquences de conversion standard ont priorité sur les séquences de conversion définies par l'utilisateur.

Résoudre le problème

Pour garantir que le standard ::string surcharge est appelé, transmettez explicitement un argument std::string:

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

Ce faisant, vous forcez le compilateur à utiliser la surcharge std::string, qui affichera correctement "Hello World" .

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