内联函数的使用,函数重载

如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句, 那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。

 

为了消除函数调用的时空开销, C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于 C 语 言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function ),又称内嵌函数或者内置 函数。
关键字 inline 必须与函数定义体放在一起才能使函数成为内联
语法:
inline type funcname(paramterType params){
        return [val];
]
以下是错误的用法,因为内联函数的 inline 关键字,只能放在函数定义的地方
inline void Foo(int x, int y); // inline 仅与 函数声明放在一起
inline是一种“用于实现的关键字”,而不是一种“用于声明的关键字”,一般的用户可以看到函数 的声明,但是看不到函数的定义,尽管在大多数教科书中内联函数的声明、定义体前面都加了 inline 关键字,但我认为 inline不应该出现在函数的声明中。
void Foo(int x, int y)
{
}
使用限制
inline 的使用是有所限制的, inline 只适合涵数体内代码简单的函数数使用,
不能包含复杂的结构控制语句例如 while switch 并且内联函数本身不能是直
接递归函数 ( 自己内部还调用自己的函数 )

函数重载

在C中,我们定义的变量名和函数名在同一作用域预定是不允许重复的。
但在C++ 中,允许我们为函数设置相同的名字,但这些函数的参数列表的顺序或者类型必须不一致,这就是C++中函数的重载
函数重载的规则
1.函数名称必须相同
2.参数列表必须不同
3.函数的返回类型可以相同也可以不同
4.仅仅返回类型不同不足以成为函数的重载
当发生函数调用时,编译器会根据传入的实参去逐个匹配,以选择 对应的函数,如果匹配失败,编译器就会报错,这叫做重载决议 (Overload Resolution )。从这个角度讲,函数重载仅仅是语法层 面的,本质上它们还是不同的函数,占用不同的内存,入口地址也 不一样。

静态变量:

静态储存区的变量是在程序刚开始的时候就会完成初始化,也是整个程序生命周期的唯一一次初始化。
静态储存区一般储存两种变量:static变量和全局变量
static 变量在函数内定义局部变量的时候,作用域只在其函数内,
但是生存周期为整个源程序。即只可以在定义该变量的函数内进行
使用,但是退出该函数后,该变量一直存在,但不可以进行使用。

C++储存类

auto是所有局部变量的默认储存类,在函数内部,加上或者不加上都没关系

static静态储存类:只初始化一次,直到程序结束,它可以保留在多个函数之间调用的值

register注册储存类:寄存器变量在寄存器中分配存储器而不是RAM,其大小与寄存器大小相同,它比其他变量具有更快的访问速度,建议仅使用寄存器变量进行快速访问

ex:在计数器中

register int cout=0;

注意:不能得到寄存器变量的地址

extern外部存储类(一般是多文件):extern变量对所有程序都可见。如果两个或多个文件共享相同的变量或函数,则使用它

  • 9
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值