一、函数默认值
1、函数默认值一般写在声明中
2、默认值赋值自右向左,依次赋值
3、默认值赋值只能赋一次
4、默认值的限制:不能使用局部变量 可以使用全局变量 可以使用函数
int Compare(int a, int b, int c = 10)//可以给所有形参设置默认值,也可以给部分形参设置默认值
{
if (a > b && b > c)
{
return a;
}
else if (b > a && a > c)
{
return b;
}
else
{
return c;
}
}
/*
int Compare(int a, int b)
{
return a > b ? a : b;
}
*/
int main()
{
Compare(30, 50);//两种调用方式都可以
Compare(30,50,40);
return 0;
}
二、函数重载
1、C++符号生成规则 -----》 返回值 函数名 参数列表
2、函数重载的三要素 -----》同作用域才能重载 同名 参数列表不同
3、注意事项:函数名相同,参数列表不同,返回值不同,不能构成函数重载
一个函数不能既做默认值,又做函数重载
//int Max(int a, int b); //?Max@@YAHHH@Z
//double Max(int a, int b); //?Max@@YANHH@Z
//double Max1(int a, int b); //?Max1@@YANHH@Z
//double Max1(int a, double b); //?Max1@@YANHN@Z
int Max(int a, int b)//?Max@@YAHHH@Z
{
return a > b ? a : b;
}
double Max(double a, double b)//?Max@@YANNN@Z
{
return a > b ? a : b;
}
char Max(char a, char b)
{
return a > b ? a : b;
}
char* Max(char* a, char* b)
{
return strcmp(a, b) > 0 ? a : b;
}
int Sum(int a, int b)
{
return a + b;
}
double Sum(int a, int b)
{
return a + b;
}
int main()
{
int rt = Sum(10, 20);
//int Max(int, int);
//Max(10, 20);
//Max("hello", "world");
//Max('a', 'b');
return 0;
}
三、inline函数(内联函数)
inline函数在编译阶段处理(和宏很像,但是比宏安全)
特点:更安全,效率高
1、以代码膨胀为代价
写成内联函数 函数堆栈的开销大于函数执行的开销
2、一般写在头文件下
3、inline函数和static的区别:
static有开栈和清栈,生成local的函数符号
inline 不生成函数符号
4、inline 函数的注意事项:
inline是给编译器的一个建议
递归包含where、switch时,内联无效,用堆栈调用
内联在Debug版本下不生效,release版本下生效
extern inline int Sum(int, int);//Sum_int_int *UND*
inline void Print(int arr[], int len)
{
if (len < 1)
{
return;
}
Print(arr, len - 1);
printf("%d ", arr[len - 1]);
}
int main()
{
int rt = Sum(10, 20);//int rt = 10 + 20;
int arr[] = { 13, 21, 3, 214, 3 };
int len = sizeof(arr) / sizeof(arr[0]);
Print(arr, len);
return 0;
}
int Compare(int a, int b, int c = 10)
{
if (a > b && b > c)
{
return a;
}
else if (b > a && a > c)
{
return b;
}
else
{
return c;
}
}
int Compare(int a, int b)
{
return a > b ? a : b;
}
int main()
{
Compare(30, 50);
return 0;
}