函数重载 (overload
)
规则
- 函数名相同
- 参数个数不同、参数类型不同、参数顺序不同
注意
- 返回值类型和函数重载无关
- 调用函数时,实参的隐式类型转换可能会产生二义性
int sum(int v1, int v2) {
return v1 + v2;
}
int sum(int v1, int v2, int v3) {
return v1 + v2 + v3;
}
void func(int v1, double v2) {
cout << "func(int v1, double v2)" << endl;
}
void func(double v1, int v2) {
cout << "func(double v1, int v2)" << endl;
}
默认参数
C++ 允许函数设置默认参数,在调用时可以根据情况省略实惨。
- 默认参数只能按照从左到右的顺序
- 如果函数同时有声明、实现,默认参数只能放在函数声明中
- 默认参数的值可以时常量、全局符号(全局函数、函数名)
int age = 28;
void test(){
cout << "test()" << endl;
}
void display(int a = 11,int b = 22, int c = age, void (*func)() = test){
cout << "a is " << a << endl;
cout << "b is " << b << endl;
cout << "c is " << c << endl;
func();
}
如果函数的实参经常时同一个值,可以考虑使用默认参数。
内联函数 (inline function)
内联函数:编译器会将内联函数调用展开为函数体代码。
OC、C++ 都有内联函数
内联函数可以解决 函数调用效率的问题:
- 函数调用需要开辟栈空间,有一定的时间消耗
- 内联函数不会开辟栈空间,可以减少函数调用的开销
什么地方适合用内联函数:
- 函数代码体积小
- 函数频繁调用
内联函数与宏
- 内联函数和宏,都可以减少函数调用的开销
- 对比宏,内联函数多了语法检测和函数特性。 所以在两者都可用的地方,首选
内联函数
。
写了 inline
关键字,函数会不会内联,还与一下因素有关
- 递归函数不会内联
- debug 模式一般不会内联,release 模式才会优化代码,内联
- 函数会不会内联,还与函数体代码量有关,与编译器也有一定关系
网友评论