Maison  >  Article  >  développement back-end  >  Pourquoi mon code C imprime-t-il « Vrai » au lieu de « Hello World » ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 03:51:02380parcourir

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>

Lorsque vous appelez la méthode comme suit :

<code class="cpp">Output::Print("Hello World");</code>

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

True

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>

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!

Déclaration:
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