首頁 > 後端開發 > C++ > 主體

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

Patricia Arquette
發布: 2024-11-02 13:47:30
原創
298 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!