首頁 >後端開發 >C++ >為什麼字串文字會觸發函數重載中的'bool”重載?

為什麼字串文字會觸發函數重載中的'bool”重載?

Patricia Arquette
Patricia Arquette原創
2024-11-02 13:47:30374瀏覽

Why does a string  literal trigger the `bool` overload in function overloading?

bool 函數重載中的字串文字歧義

定義同時接受bool 和std::string 參數的重載方法時,開發人員可能會遇到提供字串文字時出現意外行為。優先考慮 bool 重載,而不是呼叫 std::string 重載。

要理解此行為,請考慮以下情況:

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

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

儘管提供了字串文字,但 Print( ) 呼叫具有 bool 重載的方法。這是因為 C 中的字串文字可以隱式轉換為 bool 值。具體來說,「Hello World」是一個 const char* 數組,可以解釋為指向 const char 的指針,而 const char 可以隱式轉換為 bool。此轉換被視為標準轉換序列。

C 優先考慮標準轉換序列而不是使用者定義的轉換(例如,從 std::string 到 bool 的轉換)。根據 C 標準 (§13.3.3.2/2),標準轉換序列始終被認為是更好的轉換序列。

可以透過向 Print( 明確提供 std::string 參數來變更此行為) 方法:

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

以上是為什麼字串文字會觸發函數重載中的'bool”重載?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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