c++内联函数

函数调用过程

c++通过编译生成可执行程序文件exe,存放在外存储器中。程序启动,系统从外存储器中将可执行文件装载到内存中,从入口地址(main函数起始处)开始执行。程序执行中遇到了对其余函数的调用,就暂停当前函数的执行,并保存下一条指令的地址做为从被调函数返回后继续执行的入口点,保存现场。而后转到被调函数的入口地址执行被调函数。遇到return语句或者被调函数结束后,恢复先前保存的现场,从先前保存的返回地址处继续执行主调函数的其他部分。c++

内联函数

函数调用须要进行现场保护,以便在函数调用以后继续进行。函数调用后还须要恢复现场才能继续执行。这都须要系统开销,影响了程序的效率。
安全

内联函数在编译的时候将所调用的函数代码直接嵌入到主调函数中,定义方式就是在普通的函数定义前面加上inline,不存在程序流程跳转和返回,可是增长了程序代码。内联函数函数体不能含有复杂的结构控制语句,适用于1-5行的小函数。当函数规模比较大的时候,函数运行的时间相对与函数的调用和返回时间大不少,综合时间和空间考虑,用内联没有太大意义。函数

原理:

对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。若是编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,固然对全部的函数都同样)。若是正确,内联函数的代码就会直接替换函数调用,因而省去了函数调用的开销。spa

内联函数与宏的区别

1.内联函数在运行时可调试,而宏定义不能够;调试

2.编译器会对内联函数的参数类型作安全检查或自动类型转换(同普通函数),而宏定义则不会; 内存

3.内联函数能够访问类的成员变量,宏定义则不能; 编译器

4.在类中声明同时定义的成员函数,自动转化为内联函数。编译


C++ 语言的函数内联机制既具有宏代码的效率,又增长了安全性,并且能够自由操做类的数据成员。因此在C++ 程序中,应该用内联函数取代全部宏代码效率

一个可执行文件的cpp文件中一个函数只能被定义一次。若是你把函数定义在一个.h文件中并让两个cpp包含就会形成这个函数分别在两个cpp中被定义产生错误。可是inline函数是容许在多个cpp中屡次定义的,就解决了这个问题。变量

相关文章
相关标签/搜索