Heim > Backend-Entwicklung > C++ > Hauptteil

Warum gibt `Output::Print(\'Hello World\')` \'True\' anstelle von \'Hello World\' aus?

Barbara Streisand
Freigeben: 2024-11-02 06:53:02
Original
799 Leute haben es durchsucht

Why does `Output::Print(

String-Literal-Überladungskonflikt: Bool vs. std::string

In C können Klassenmethoden überladen werden, um verschiedene Parametertypen zu akzeptieren Möglicherweise stimmte unerwartet mit der booleschen Typüberladung statt mit der erwarteten std::string-Überladung überein.

Problembeschreibung:

Angenommen, wir haben eine Ausgabeklasse, die wie folgt definiert ist:

<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>
Nach dem Login kopieren

Beim Aufruf von Output::Print("Hello World ") ist das Ausgabeergebnis „True“ anstelle des erwarteten „Hello World“.

Problemanalyse:

Obwohl wir die std::string-Überladung definiert haben, ist „Hello World“ tatsächlich eine Zeichenarray-Konstante, die implizit in bool konvertiert werden kann. Der Compiler bevorzugt diese Standardkonvertierung gegenüber dem benutzerdefinierten std::string-Konvertierungskonstruktor.

Gemäß dem C-Standard (§13.3.3.2/2) haben Standard-Konvertierungsaufträge Vorrang vor benutzerdefinierten Konvertierungsaufträgen. Daher wählt der Compiler die Bool-Überladung, da diese eine bessere Konvertierungsreihenfolge aufweist.

Problemumgehung:

Um die std::string-Überladung explizit aufzurufen, müssen wir „Hello World“ explizit als std::string:

übergeben
<code class="cpp">Output::Print(std::string("Hello World"));</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum gibt `Output::Print(\'Hello World\')` \'True\' anstelle von \'Hello World\' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!