函式過載遇上函式指標

2022-06-21 06:24:09 字數 903 閱讀 8107

函式過載遇上函式指標

-將過載函式名賦值為函式指標時

1. 根據過載規則挑選與函式指標列表一致的候選者;

2. 嚴格匹配候選者的函式型別與函式指標的函式型別

看下面的**:

#include int func(int

x)int func(int x, int

y)int func(int x, int y, int

z)typedef

int(*pfunc)(int

a);int

main()

列印結果c=1

做這樣的修改,typedef void(*pfunc)(int a);

編譯時將出現這樣的錯誤,

說明當函式過載遇上函式指標時,將嚴格匹配候選者的函式型別與函式指標的函式型別

注意:-函式過載必然發生在同乙個作用域中

-編譯器需要用引數列表或函式型別進行函式選擇。(返回值不作為過載的依據,但是當函式過載遇上函式指標時,就需要考慮返回值了,會進行嚴格的匹配)

無法直接通過函式名得到過載函式的入口位址

強調同一作用域的原因:

因為在c++中不止乙個作用域,而c語言只有乙個作用域-全域性作用域。

看下面這個例子:

該程式說明,無法直接通過函式名得到過載函式的入口位址

當函式過載遇上函式指標

include include using namespace std void func void func int a void func int a,int b void func string a,string b typedef void fp1 int,int typedef void ...

當函式模版遇上函式過載

demo 1 include using namespace std 讓 型別引數化 方便程式設計師進行編碼 泛型程式設計 template 告訴c 編譯器 我要開始泛型程式設計了 看到t,不要隨便報錯 template void myswap t a,t b void myswap int a,c...

當函式模版遇上函式過載

demo 1 include using namespace std 讓 型別引數化 方便程式猿進行編碼 泛型程式設計 template 告訴c 編譯器 我要開始泛型程式設計了 看到t,不要隨便報錯 template void myswap t a,t b void myswap int a,cha...