Heim > Backend-Entwicklung > C++ > Warum gibt mein C-Code „True' anstelle von „Hello World' aus?

Warum gibt mein C-Code „True' anstelle von „Hello World' aus?

Mary-Kate Olsen
Freigeben: 2024-11-03 03:51:02
Original
442 Leute haben es durchsucht

Why Does My C   Code Print

String Literal Matching Boolean Overload Anstelle von std::string

Bedenken Sie den folgenden C-Code:

<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

Wenn Sie die Methode wie folgt aufrufen:

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

Sie werden vielleicht überrascht sein, die Ausgabe zu sehen:

True
Nach dem Login kopieren

Warum wurde die boolesche Überladung der Print-Methode anstelle von std aufgerufen: :string-Überladung?

Den Konvertierungsmechanismus verstehen

String-Literale in C, wie zum Beispiel „Hello World“, werden als Arrays von Konstantenzeichen gespeichert. Sie können jedoch implizit in Zeiger auf konstante Zeichen konvertiert werden, die dann in bool konvertiert werden können.

Im bereitgestellten Code bevorzugt der Compiler die Standardkonvertierungssequenz von „Hello World“ in bool gegenüber dem Benutzer- definierte Konvertierungssequenz von „Hello World“ nach std::string. Diese Präferenz basiert auf dem C-Standard, der besagt, dass Standardkonvertierungssequenzen Vorrang vor benutzerdefinierten Konvertierungssequenzen haben.

Beheben des Problems

Um sicherzustellen, dass die std Wenn die ::string-Überladung aufgerufen wird, übergeben Sie explizit ein std::string-Argument:

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

Auf diese Weise zwingen Sie den Compiler, die std::string-Überladung zu verwenden, die korrekt „Hello World“ ausgibt. .

Das obige ist der detaillierte Inhalt vonWarum gibt mein C-Code „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