inline函数
1.什么是inline函数
内联函数是指用inline关键字修饰的函数。如果内联函数在类体内定义,不用inline关键字声明,默认为内联函数,在编译阶段遇到函数调用直接进行代码展开。
2.内联具体是怎么实现的?
编译器在它的符号表里放入函数类型和参数(包括函数名字和参数类型及返回值类型),另外,编译器看到内联函数和内联函数的分析没有错时,函数的代码也被放入符号表中,代码是以源程序的形式存放还是以编译过的指令存放取决于编译器。
3.inline函数的优缺点
优点:
没有函数的开栈与清栈过程使得效率高。
缺点:
1. 以代码膨胀为代价,用空间换取了时间。
2.如果内联函数发生了改动,那么就需要重新编译代码;
3.要把内联函数放在头文件中;
建议:
开栈和清栈消耗 > 执行的消耗 代码少 设置为inline函数
执行的消耗 > 开栈的消耗 代码多 不设置inline函数
4.inline函数注意事项
1.inline的定义和实现写在头文件中,
2.inline 函数只在release版本生效,
3.inline函数只是给编译器的一个建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展 开,就会真正内联,并不是说声明了内联就会内联。(例如,递归,for,switch等 )
inline void Print(int *arr, int len) //len在运行阶段才知道数值
{
if (len == 0)
return ;
Print(arr, len - 1);
cout << arr[len - 1] << " ";
}
4.inline函数基于实现,不是基于声明
5.inline函数与宏的区别
宏:不是一个函数,在预编译阶段,进行简单的文本替换,没安全检查,没类型检查,是不安全的
inline函数:在编译阶段,调用点展开,有安全检查和类型检查,是安全的。(一种 更安全的宏)
6.inline函数和static修饰的函数的区别:
1.普通函数在被调用的时候,系统首先要到函数的入口地址去执行函数体,执行完成之后再回到函数调用的地方继续执行;
内联函数不需要寻址,当执行到内联函数的时候,将此函数展开,加快了程序的运行速度,因为不需要中断调用,在编译的时 候内联函数可以直接镶嵌到标代码中。
2.内联函数有一定的限制,内联函数体要求代码简单,不能包含复杂的结构控制语句。如果内联函数函数体过于复杂,编译器将自动把内联函数当成普通函数来执行。
3.普通函数 ,产生global符号,整个项目可以连接使用;
inline函数在Debug版本产生local符号,release版本不产生符号,在本文件中可见。
来源:CSDN
作者:丿灬慕容笑笑
链接:https://blog.csdn.net/weixin_42078660/article/details/103586153