C 過載函式(函式匹配與實參型別轉換)

2021-08-16 20:05:03 字數 2717 閱讀 8238

1,函式匹配(過載確定)

過載確定的三個步驟:

(1)候選函式

(2)選擇可行函式

(3)尋找最佳匹配

比較特殊的是print(3.14),它的引數是double型別,但是選擇候選函式的時候,因為沒有最完美匹配,只能丟失精度,強制轉換為int型別。還有print(3.2,1)這種型別,因為目標函式不唯一,有二義性,所以會出錯。我們最好不要出現這樣的寫法,如果非要這樣,可以強制轉換如下:

print(static_cast(40),3.14);//c++(推薦) 

2,實參型別轉換

第乙個例子:

字元會優先選擇int型別。

第二個例子:

如果變成把long改為double,情況就不一樣了。

第三個例子(列舉):

abc = 110,但是,因為有更優的選擇,abc不需要轉型就能匹配,選擇了print(tokens a)。

第四個例子:

第五個例子:

第六個例子:

這兩個其實是乙個意思,同時出現會報錯。

同理,這兩個也一樣:

void print(const int* a)

void print(const int* const a)

C 函式過載與函式匹配

c primer 筆記,整理關於函式過載與函式匹配的筆記。void func int a 原函式 void func double a 正確 形參型別不同 void func int a,int b 正確 形參個數不同 int func int a 錯誤 只有返回型別不同 typedef int i...

c 函式過載與匹配

匹配規則 精確匹配 常量版本匹配 變數提公升 算數 指標轉換 類型別轉換 當我們為函式過載,並呼叫過載後的函式時,編譯器會自動根據引數型別進行匹配與轉換但是此時 容易出現二義性錯誤,函式引數轉換與型別提公升容易混淆,例如當我們同時過載了float double 版本的函式時,傳入乙個int型實參,就...

c 學習 基礎 過載函式 實參型別轉換

date 05 03 21 16 36 description 過載函式 實參型別轉換 轉換等級 1.精確匹配 2.通過型別提公升 3.通過標準轉換 4.通過類型別轉換 引數匹配和列舉型別 過載和const形參 include using namespace std class account ac...