C++ inline 与#define 区别联系

本文探讨了C++中内联函数(inline)与宏定义(#define)的区别及应用场景,详细介绍了内联函数如何提高执行效率,并指出其在编译阶段与宏定义展开的不同之处。此外还强调了内联函数的安全性和使用限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、inline与#define
     内联函数是代码被插入到调用者代码处的函数。如同 #define 宏,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。 

2、区别
  1. 内联函数在编译时展开,而宏是由预处理器对宏进行展开
  2. 内联函数会检查参数类型,宏定义不检查函数参数 ,所以内联函数更安全。
  3. 宏不是函数,而inline函数是函数
  4. 宏在定义时要小心处理宏参数,(一般情况是把参数用括弧括起来)。

3、inline的使用

  1. 在C++中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字 
  2. 在内联函数内不允许用循环语句、开关语句和递归调用等,且函数体不宜过长,否则作为普通函数处理。
  3. 在你调用一个内联函数之前,这个函数一定要在之前有声明或已定义为inline,如果在前面声明为普通函数,而在调用代码后面才定义为一个inline函数,程序可以通过编译,但该函数没有实现inline
  4. 如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。解析:如果内联函数fun()定义在某个编译单元A中,那么其他编译单元中调用fun()的地方时,可以编译通过(此时并没有展开,结合第三条,此时虽然头文件声明了该inline函数,但此时调用时,还没定义,所以作为普通函数处理)。当链接时将无法解析该符号,出现链接错误。 因为inline函数是作为内部连接存在的,只能够被本模块访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值