[英]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.