1.内联函数
2.函数重载
编译器调用函数重载时的原则:
①将所有同名函数作为候选者
②尝试查找可行的候选函数
--通过函数名精确查找;
#include <iostream> int func(int a, int b) { return a + b; } int gunc(int a, int b) { return a + b; } int main() { func(1,2); //根据函数名精确查找 return 0; }
--通过默认参数能够匹配实参;
#include <iostream> int func(int a, int b, int c = 0) { return a + b; } int func(int a, int b) { return a + b; } int main() { func(1,2); //前两个参数匹配后,编译器还会尝试补充一个默认参数看是否有匹配 return 0; //项,如本例匹配到存在函数有默认参数c,则编译不通过,二次定义 }
--通过默认类型能够转换实参;
#include <iostream> int func(int a, int b, int c) { return a + b; } int func(int a, int b) { return a + b; } int main() { func('a',2); //编译器匹配无字符类型参数后,会尝试将字符类型转换为int型匹配 return 0; //其余的函数; }