内联函数,函数重载,默认参数,函数占位符

inline:修饰的函数为内联函数、内嵌函数
空间(内存空间)、时间(编译时间、运行时间)
以时间换空间:消耗更多编译运行时间,换取占用更小的内存。(宏函数)
以空间换时间:占用更多的内存空间,换取运行时间。(inline内嵌函数)
inline :改变函数调用的处理过程(将函数体里的语句内嵌到函数的调用地方!)
分析:

inline int add(int a, int b)//内联函数
{
	int num;
	int num2;
	return a + b;
}
#include<iostream>
#define MAX (a,b) a>b?a:b
int main()
{
 }
//宏定义
//处理阶段:是在预处理阶段完成。
//处理过程:傻瓜式替换(没有空间的分配过程)不做语法检查!! 不安全

宏定义
处理阶段:是在预处理阶段完成。
处理过程:傻瓜式替换(没有空间的分配过程)不做语法检查!! 不安全

自定义函数
处理阶段:编译时检查语法、运行时函数进行栈进栈出
处理过程:通过函数名找到函数的入口地址;给形参分配空间;传值;执行函数体的语句;函数返回;释放空间

内联函数在c++中的升级:
inline 是由编译决定,使用inline关键字只是申请编译器;
限制:
1、内联函数中不可含有循环
2、内联函数中不可能含有静态变量
3、内联函数不可为递归函数;
4、内联函数中不可含有错误处理。
选择:
1、只将规模很小(一般5个语句一下)而使用频繁的函数声明为内联函数
2、在函数规模很小的情况下,函数调用的时间开销可能相当于甚至超过执行函数本身的时间,把它定义为内联函数,可大大减少程序运行时间。
注意事项:
内联函数的定义必须出现在内联函数第一次调用之前;

加强
inline:
1、编译器决定是否内联处理
2、函数的默认参数:如果一个参数为默认参数,那么它右边的所有参数必须为默认参数
3、函数的占位符:预留函数接口
4、函数的重载:函数名命名的可读性问题
函数重载的条件:函数名相同,函数形参个数,类型或者顺序不同(相同类型没有顺序)
注意事项:函数返回值不能作为重载条件 、函数默认参数会影响重载条件
编译器如何实现函数重载? ||编译器会用自己的方式给其重命名

#include<iostream>
using namespace std;
int add(int a, int b, int c = 5)
{
	return a + b + c;
}
int main()
{
	cout << add(5, 6) << endl;
	cout << add(4, 5, 6) << endl;

	return 0;
}
#include<iostream>
using namespace std;
int aub(int a, int)
{
	return a;
}
int main()
{
	
	cout << sub(5,6) << endl;

	return 0;
}
#include <stdio.h>//函数默认命名会影响重载条件
 
int func(int a, int b, int c=0)
{
    return a + b;
}
 
int func(int a, int b)
{
    return a + b;
}
 
int main()
{
    func(1,2); // 哪个函数会被调用
 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&*Savior

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值