概念
函數重載允許在同一作用域內定義多個同名函數,但這些函數的參數要滿足:參數類型、參數個數,參數順序不同(滿足三個中的一個),才能使用函數重載
#include <iostream>
using namespace std;// 1. 參數個數不同
void print(int a) {cout << "一個整數參數: " << a << endl;
}void print(int a, int b) {cout << "兩個整數參數: " << a << " 和 " << b << endl;
}// 2. 參數類型不同
void print(double a) {cout << "一個雙精度參數: " << a << endl;
}// 3. 參數順序不同
void print(int a, double b) {cout << "[int, double] 順序: " << a << ", " << b << endl;
}void print(double a, int b) {cout << "[double, int] 順序: " << a << ", " << b << endl;
}int main() {print(5); // 調用一個整數參數的版本print(10, 20); // 調用兩個整數參數的版本print(3.14); // 調用雙精度參數的版本print(5, 3.14); // 調用[int, double]順序的版本print(3.14, 5); // 調用[double, int]順序的版本return 0;
}
編譯器如何區分同名函數
編譯器通過函數名和參數列表生成唯一的內部標識符(稱為“名字修飾”),因此參數列表不同的同名函數會被視為不同的函數
在使用時編譯器會根據傳遞的函數參數的類型、個數、參數順序來判斷將參數傳遞給那個函數
函數重載與全缺省之間的歧義
當兩個函數一個是無參和一個定義一個缺省值的函數,這兩個函數是滿足函數重載的條件的,但在調用時這兩個函數會產生歧義,編譯器不知道調用那個函數從而發生報錯