可能重複:
List of C++ name resolution (and overloading) rules函數重載在C++
什麼是編譯器如何決定哪些功能要在C++的規則? (這是給定的兩個函數具有相同的名稱 - 編譯器如何選擇/優先考慮另一個函數,主要是想知道編譯器選擇何種類型的編譯器時更願意執行)
可能重複:
List of C++ name resolution (and overloading) rules函數重載在C++
什麼是編譯器如何決定哪些功能要在C++的規則? (這是給定的兩個函數具有相同的名稱 - 編譯器如何選擇/優先考慮另一個函數,主要是想知道編譯器選擇何種類型的編譯器時更願意執行)
如前所述,規範在標準中有完整的描述。作爲一個基本的經驗法則,編譯器將選擇需要最少自動轉換的重載,但要注意的是它永遠不會應用2個用戶定義的轉換。
整數類型會自動轉換很多。因此,如果您的函數在int
和double
上超載,則編譯將選擇int
函數(如果使用一個整數常量調用)。如果您沒有int
版本,編譯器會選擇double
之一。在各種整數類型中,編譯器更喜歡整數常量爲int
,因爲這是它們的類型。如果您在short
和unsigned short
上超載,但調用常量爲5
,則編譯器會抱怨說無法確定要使用哪個超載。
Scott Meyers的書確實有我讀過的最好的解釋。
你的意思是壓倒一切嗎? – MGZero
規則很多...並且很複雜。所有這些都在C++標準的** 3.4 **部分中涵蓋了。 –
@MGZero - no ... – Belgi