1.2.3-1.2.4 inline内联函数和函数重载

3、inline内联函数

1.>

内联函数它的具体做法和宏非常相似,也是在调用处直接将代码展开,只不过宏它是在预编译阶段展开,而内联函数是在编译阶段进行处理的。

2.>

内联函数和普通函数的区别:内联函数没有栈帧的开辟回退,一般我们直接把内联函数写在头文件中

递归一般不能声明为内联函数。

4.>

C++中inline内联编译的限制:
不能存在任何形式的循环语句
不能存在过多的条件判断语句
函数体不能过于庞大
不能对函数进行取址操作
函数内联声明必须在调用语句之前

递归一般不能声明为内联函数。

5.>总结
优点:避免调用时的额外开销(入栈与出栈操作)
代价:由于内联函数的函数体在代码段中会出现多个“副本”,因此会增加代码
段的空间。
本质:以牺牲代码段空间为代价,提高程序的运行时间的效率。
适用场景:函数体很“小”,且被“频繁”调用。


4、函数重载

1.>

C语言不存在函数重载,C++有函数重载。

2.>

重载规则

  • 函数名相同。
  • 参数个数不同,参数的类型不同,参数顺序不同,均可构成重载。
  • 返回值类型不同则不可以构成重载 。
void func(int a);	//ok
void func(char a);	//ok
void func(char a, int b);	//ok
void func(int a, char b);	//ok
char func(int a);	//与第⼀个函数有冲突(第三条,返回值类型不同)

3.>

函数重载与函数默认参数

一个函数,不能既作重载,又作默认参数的函数。当你少写一个参数时,系统无法确认是重载还是默认参数。

#include <iostream>
using namespace	std;	
int	func(int a, int	b, int c = 0)	
{	
	return a * b * c;	
}	
int	func(int a,	int	b)	
{	
	return a + b;	
}	
int	func(int a)	
{	
	return a;	
}	
int	main()	
{	
	int	c =	0;	
	c = func(1,	2);			//会报错,存在⼆义性,调⽤失败,编译不能通过
	printf("c =	%d\n",	c);	
	return 0;	
}	

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值