簡體   English   中英

為什么首先調用bool_function?

[英]why does it call bool_function first?

我對以下代碼感到好奇,有人可以解釋為什么它首先調用bool func嗎? 'str“更適合arg類型的字符串嗎?

 void a(bool input)
    {
        cout<<"I amd first"<<endl;
        cout<<input<<endl;
    }

    void a(const string &input)
    {
        cout<<"I amd second"<<endl;
        cout<<input<<endl;
    }

    int main( )
    {
        a("str");  //  call  void a(bool input)

        a(string("str"));   //call  void a(const string &input)

        return 0; 
    }

"str"的類型為const char[4] ,它會立即衰減為const char * ,並且在將非顯式構造函數轉換為自定義類型之前,應考慮從任何指針類型到bool的轉換。

因此,我會說答案是“因為該標准如此規定”。

相關段落應為13.3.3.2¶2:

比較隱式轉換序列的基本形式(如13.3.3.1所定義)

  • 標准轉換序列(13.3.3.1.1)比用戶定義的轉換序列或省略號轉換序列更好。[...]

我猜這是因為當您調用a(“ str”)時,您試圖調用帶有const char *參數的函數。 它將在任何其他隱式轉換(:: std :: string等)之前將任何類型的指針轉​​換為bool。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM