日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 如何判断所调用的重载函数

發(fā)布時間:2025/3/13 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 如何判断所调用的重载函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)重載是C++的一個重要特性,但是函數(shù)重載后調(diào)用哪一個函數(shù)往往令人很困惑,參照《C++ Primer》第七章的內(nèi)容總結(jié)如下:



?重載確定函數(shù)調(diào)用的步驟
1、候選函數(shù)(candidate function)
  ?1)、僅當形參是引用或指針時,形參是否為const 才有影響
  ?2)、不能基于指針本身是否為const 來實現(xiàn)函數(shù)重載
  ?3)、return 的類型不能用于判斷重載

?2、可行函數(shù)
  ?1)、函數(shù)形參個數(shù)匹配(默認參數(shù)也是實參)
  ?2)、類型匹配,包含隱式轉(zhuǎn)換的匹配
3、尋找最佳匹配
  1)、精確類型匹配 > 需要轉(zhuǎn)換的匹配
  2)、通過類型提升的轉(zhuǎn)換 > 其他標準轉(zhuǎn)換


我還是喜歡用實際的例子來說明問題:

1 #include <iostream> 2 #include <cstdlib> 3 4 /*=================================================================*\ 5 * 6 * 重載確定函數(shù)調(diào)用的步驟 7 * 8 * 2013/6/5 by 樊列龍 9 * 10 \*=================================================================*/ 11 12 /* 13 * 重載確定函數(shù)調(diào)用的步驟 14 * 1、候選函數(shù)(candidate function) 15 * 1)、僅當形參是引用或指針時,形參是否為const 才有影響 16 * 2)、不能基于指針本身是否為const 來實現(xiàn)函數(shù)重載 17 * 3)、return 的類型不能用于判斷重載 18 * 2、可行函數(shù) 19 * 1)、函數(shù)形參個數(shù)匹配(默認參數(shù)也是實參) 20 * 2)、類型匹配,包含隱式轉(zhuǎn)換的匹配 21 * 3、尋找最佳匹配 22 * 1)、精確類型匹配 > 需要轉(zhuǎn)換的匹配 23 * 2)、通過類型提升的轉(zhuǎn)換 > 其他標準轉(zhuǎn)換 24 */ 25 26 using namespace std; 27 28 29 //// 30 void funA(int &a, int &b) 31 { 32 cout << "調(diào)用:funA(int &a, int &b)" << endl; 33 } 34 35 void funA(const int &a, const int &b) 36 { 37 cout << "調(diào)用:funA(const int &a, const int &b)" << endl; 38 } 39 40 41 //// 42 void funB(int *a, int *b) 43 { 44 cout << "調(diào)用:funB(int *a, int *b)" << endl; 45 } 46 void funB(const int *a, const int *b) 47 { 48 cout << "調(diào)用:funB(const int *a, const int *b)" << endl; 49 } 50 51 //// 52 void f() 53 { 54 cout << "調(diào)用:void f()" << endl; 55 } 56 57 void f(int ) 58 { 59 cout << "調(diào)用:void f(int )" << endl; 60 } 61 62 void f(int , int i = 1 ) 63 { 64 cout << "調(diào)用:void f(int , int )" << endl; 65 } 66 67 void f(double, double d = 1.0) 68 { 69 cout << "調(diào)用:void f(double, double)" << endl; 70 } 71 72 73 /// 74 void ff(short) 75 { 76 cout << "調(diào)用:void ff(short)" << endl; 77 } 78 void ff(int) 79 { 80 cout << "調(diào)用:void ff(int)" << endl; 81 } 82 83 /// 84 void fff(long) 85 { 86 cout << "調(diào)用:void fff(long)" << endl; 87 } 88 void fff(float) 89 { 90 cout << "調(diào)用:void fff(float)" << endl; 91 } 92 93 int main() 94 { 95 int a, b; 96 const int ca = 0; 97 const int cb = 0; 98 99 funA(a,b); // 調(diào)用:funA(int &a, int &b) 100 funA(a,cb); // 調(diào)用:funA(const int &a, const int &b) 101 funA(ca,cb); // 調(diào)用:funA(const int &a, const int &b) 102 103 funB(&a,&b); // 調(diào)用:funB(int *a, int *b) 104 funB(&ca,&cb); // 調(diào)用:funB(const int *a, const int *b) 105 funB(&a,&cb); // 調(diào)用:funB(const int *a, const int *b) 106 107 108 f(5.6); // 調(diào)用:void f(double, double) 109 //f(5); // Error: 調(diào)用重載的‘f(int)’有歧義 110 //f(5,6.0); // 錯誤:調(diào)用重載的‘f(int, double)’有歧義 111 f(static_cast<double>(5),6.0);// 調(diào)用:void f(double, double) 112 f(5,static_cast<int>(6.0)); // 調(diào)用:void f(int , int ) 113 114 115 cout << "sizeof(short): " << sizeof(short) << endl; 116 cout << "sizeof(char): " << sizeof(char) << endl; 117 118 ff('a'); // 調(diào)用:void ff(int) 119 120 //double 既可以轉(zhuǎn)換為long 也可以轉(zhuǎn)換為 float,有二義性 121 //fff(3.14); // 錯誤:調(diào)用重載的‘fff(double)’有歧義 122 123 return EXIT_SUCCESS; 124 }

執(zhí)行結(jié)果:

1 調(diào)用:funA(int &a, int &b) 2 調(diào)用:funA(const int &a, const int &b) 3 調(diào)用:funA(const int &a, const int &b) 4 調(diào)用:funB(int *a, int *b) 5 調(diào)用:funB(const int *a, const int *b) 6 調(diào)用:funB(const int *a, const int *b) 7 調(diào)用:void f(double, double) 8 調(diào)用:void f(double, double) 9 調(diào)用:void f(int , int ) 10 sizeof(short): 2 11 sizeof(char): 1 12 調(diào)用:void ff(int) View Code

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/CocoonFan/archive/2013/06/05/3118240.html

總結(jié)

以上是生活随笔為你收集整理的C++ 如何判断所调用的重载函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。