函数默认值、函数重载、inline函数

本文详细介绍了C++中的函数默认值、函数重载和inline函数。函数默认值遵循从右向左赋值且只能赋值一次,不能使用局部变量作为默认值。函数重载要求同名函数在同作用域内,参数列表不同。inline函数用于提高效率,编译器在编译阶段处理,但可能导致代码膨胀。内联函数不生成函数符号,通常放在头文件中,其使用需要注意递归和调试模式下可能失效的情况。
摘要由CSDN通过智能技术生成

一、函数默认值

       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;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值