C++ - 函数重载
概念
函数重载允许在同一作用域内定义多个同名函数,但这些函数的参数要满足:参数类型、参数个数,参数顺序不同(满足三个中的一个),才能使用函数重载
#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;
}
编译器如何区分同名函数
编译器通过函数名和参数列表生成唯一的内部标识符(称为“名字修饰”),因此参数列表不同的同名函数会被视为不同的函数
在使用时编译器会根据传递的函数参数的类型、个数、参数顺序来判断将参数传递给那个函数
函数重载与全缺省之间的歧义
当两个函数一个是无参和一个定义一个缺省值的函数,这两个函数是满足函数重载的条件的,但在调用时这两个函数会产生歧义,编译器不知道调用那个函数从而发生报错