1. 函数默认参数和占位参数(亚元)
形参中的占位参数又叫亚元,并没有什么实际意义,只在函数重载中起到作用
// 亚元,设置了默认值所以调用时可以不传参数
// 否则就必须传入两个参数
void foo(int a, int = 0){
cout << "a = " << a << endl;
}
int main()
{
foo(20);
return 0;
}
2. 函数重载
- 函数名相同,形参列表不同(形参个数、类型、顺序)
- 函数返回值不起作用
- 函数重载和默认参数不要同时使用(函数调用时容易产生二义性)
- 倾轧技术(name mangling),底层会将函数名进行编译
- 用
v c i f l d
表示void char int float long double
及其引用 int fun(int) => fun_i
int fun(int, char, double) => fun_icd
- 用
- 重载函数匹配顺序
- 如果能够严格匹配,则调用完全匹配的
- 如果没有完全匹配的,则调用隐式转换的
- 都匹配不上,编译失败
3. 函数指针
int test(int a, int b){
cout << "test(" << a << ", " << b << ")" << endl;
return 0;
}
// 方式一:
typedef int(FUN)(int, int);
// 方式二:
typedef int(*FUN_P)(int, int);
int main()
{
// 方式一:
FUN *f1 = NULL;
f1 = test;
f1(10, 20);
(*f1)(10, 20);
// 方式二:
FUN_P f2 = NULL;
f2 = test;
f2(10, 20);
// 方式三:
int (*f3)(int, int) = NULL;
f3 = test;
f3(10, 20);
return 0;
}
输出:
Start
test(10, 20)
test(10, 20)
test(10, 20)
test(10, 20)
0
Finish