举例:实现比较两个数的大小
#include <iostream> #include <string> using namespace std; #define GETMAX(a, b) ((a) > (b)) ? (a) : (b); inline int getMax(int a, int b) { return ((a) > (b)) ? (a) : (b); } int main(int argc, char const* argv[]) { int n = getMax(1, 2); int n1 = GETMAX(1, 2); char* p = nullptr; char* q = nullptr; char* m = GETMAX(p, q); return 0; }
使用宏,虽然可以实现忽略传入的数据类型,但是不安全
使用(内联)函数,虽然更安全,但是由于有类型检查而扩展性不好
在C++中允许出现同名的函数--函数重载
条件(函数要素:函数名、函数参数、函数返回值、函数的调用约定):
1.函数名必须相同
2.函数参数个数不同,类型不同,类型顺序不同
3.函数的返回值,调用约定不做考虑
4.作用域相同
函数重载的调用规则
1.根据函数名找对应的函数,作为候选函数
1.1如果候选函数个数为0,则报为定义错误(找不到标识符)
2.候选函数个数>0,从候选中找匹配的函数(完全匹配,可以转换的匹配【char <-->int】【float<-->double】【float<-->int】)
2.1如果匹配的函数个数 == 0,则错误(隐式转换失败)
2.2如果匹配个数>0,找匹配最佳
3.最佳匹配个数 = 1,就调用该函数
最佳匹配个数 > 1,就会报二义性