inline内联函数

1、什么是内联函数?

inline修饰的函数称之为内联函数,内联函数是一种编程语言结构,在编译阶段在函数调用点代码直接展开。

2、内联函数如何工作的?

对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。(该段文字来自《高质量C++ C编程指南》)

3、内联函数的特点?

在编译阶段在函数调用点代码直接展开;

inline只在release版本中生效,对debug版本不起作用;

inline可以看做是给编译器的一个建议,至于要不要将函数处理为内联函数,有编译器自己决定;

(其中,递归、switch、循环一定不会被处理为内联)

inline加在函数声明上是没有意义的,inline是基于实现的,必须写在函数实现上;

定义在类声明中的成员函数将自动地成为内联函数;

4、inline函数的缺点?

内联函数是以代码膨胀为代价,仅仅省去了函数调用的开销,从而来提高执行效率,当函数开栈或清栈的开销小于执行的开销,用内联就不划算了;

不是所有函数都可以当做内联函数来处理;

5、inline函数和static函数的区别?

inline函数没有开栈和清栈的开销,而static函数有;

inline函数是因为在调用点代码直接展开,导致了只能在本文件使用,而static函数是因为修改了函数的属性,导致了只能在本文件使用;

6、inline和的define的区别?

inline处理是在编译阶段,有类型检查和安全检查,更安全(也可以把inline看做一种更安全的宏),define处理在与编译阶段,没有类型检查和安全检查;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值