c++:内联函数(使用场景、注意事项、及相关面经)

内联函数:

inline修饰的函数叫做内联函数,编译阶段C++编译器会在调用内联函数的地方直接展开,没有函数压栈的开销。“空间换时间”

一、inline一般用于如下情况:

  1. 一个函数不断地被重复调用(函数体小适宜)
  2. 函数只有简单几行,且函数不包括for,while,switch语句。

一般来说,小程序没必要定义成inline,但是如果要完成一个工程项目,当一个简单函数被调用多次时,则应该考虑用inline

二、inline的注意事项:

  1. 一般写头文件中,便于一个项目多个文件的引用。
  2. 只在Release版本生效
  3. 给编译器的一个建议,最终决定权在于编译器(递归、循环不展开)
  4. 是基于实现,不是基于声明

inline void Foo(int x,int y); //inline与函数声明放在一起,不能成为lnline
void Foo(int x,int y){}


void Foo(int x,int y);
inline void Foo(int x,int y)   //与函数的定义体放在一起,可以成为内联函数

 内联是以代码膨胀(复制)为代价,只省去了函数调用开栈的开销。如果执行代码的开销相比于调用的开销较大,那么提高的效率很少。另外,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。是否设置为inline需要权衡:

调用开销  >  执行开销,设为inline函

调用开销  <  执行开销,不设为inline函数

 相关面经

1.inline函数与static修饰的函数的区别

  • inline 无开栈清栈开销,static函数需要清栈开栈。
  • inline 因为编译阶段代码展开导致函数本文件可见, static 符号属性为local 本文件可见

2.inline函数和宏的区别

  • inline 在编译阶段进行参数 类型检查和安全检查,宏处理在预编译期间,不进行参数 类型检查和安全检查。
  •  inline是一种更安全的宏 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值