c 之函式過載 函式匹配

2022-09-04 20:36:11 字數 957 閱讀 8687

case

void

f();

void f(int

);void f(int, int

);void f(double, double = 3.14);

匹配原則:

1)其形參數量與本次呼叫提供的實參數量相等

2)每個實參的型別與對應的形參型別相同,或者可以轉換成形參的型別;

尋找最佳匹配:

1)該函式每個實參的匹配都不劣於其他可行函式需要的匹配;

2)至少有乙個實參的匹配優於其他可行函式提供的匹配;

例子:

a) f(2.56,38

);b) f(

38);

c) f(

32,0

);d) f(

3.9,9.8);

a)可行函式是void f(int, int)與void f(double, double =3.2)。但是最佳匹配不存在,考慮第乙個引數 void f(double, double =3.2) 優勢明顯;

但考慮到第二個實參38時,void f(int, int) 優勢明顯,具有二義性而拒絕其請求;

b)void f(int);

c)void f(int, int);

d)double f(double, double = 3.2);

tips:

函式過載時,應盡量避免強制型別轉換。

函式匹配與const實參

record(acount&);

record(

const acount&);

const

acount a;

acount b;

record(a);

//呼叫record(const acount&);

record(b);//

呼叫record(acount&);

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 之 函式過載

函式的過載 函式的過載就是可以在乙個程式中使用同名的若干個函式。主要的限制是給定名稱的每個函式必須有不同的引數列表。也就是說,乙個引數列表中的引數型別與另乙個不同 不僅僅是引數名不同,實際上,如果滿足下列條件之一,兩個同名函式就是不同的 1.每個函式的引數個數不同 2.引數的個數相同,但至少有一對對...