首頁  >  文章  >  後端開發  >  為什麼我的 C 代碼會列印“True”而不是“Hello World”?

為什麼我的 C 代碼會列印“True”而不是“Hello World”?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 03:51:02379瀏覽

Why Does My C   Code Print

字串文字匹配布林重載而不是std::string

考慮以下C 程式碼:

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

當如下呼叫該方法時:

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

您可能會驚訝地看到輸出:

True

為什麼呼叫Print 方法的布林重載而不是std: :字串重載?

理解轉換機制

C 中的字串文字,例如“Hello World”,儲存為 const 字元陣列。但是,它們可以隱式轉換為指向 const 字元的指針,然後可以將其轉換為 bool。

在提供的程式碼中,編譯器更喜歡從「Hello World」到 bool 的標準轉換序列,而不是使用者-定義從「Hello World」到 std::string 的轉換序列。此首選項基於 C 標準,該標準規定標準轉換序列優先於使用者定義的轉換序列。

解決問題

確保std ::string 重載被調用,明確傳遞一個std::string 參數:

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

這樣做,你強制編譯器使用std::string 重載,這將正確輸出“Hello World” .

以上是為什麼我的 C 代碼會列印“True”而不是“Hello World”?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn