C++ inline 与#define 区别联系

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函数是作为内部连接存在的,只能够被本模块访问。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
define、const和inline是C/C++语言中的三个关键词,它们的使用和作用有一些区别。 首先是define,它是C/C++中的一个预处理指令。通过使用define,我们可以定义一个简单的替换规则,将一个标识符或字符串替换为另一个标识符、值或代码片段。这种替换是在编译之前进行的,称为文本替换。define没有类型概念,只是简单地将指定的标识符或字符串进行替换。 其次是const,它是C/C++中的一个关键字。通过使用const,我们可以创建一个只读的常量,即该变量的值在定义之后不可更改。常量的值可以在编译时确定或运行时确定,这取决于const修饰的变量是全局的还是局部的。const具有类型概念,可以保护数据的完整性,并帮助编译器识别错误的赋值操作。 最后是inline,它是C/C++中的一个关键字,用于声明内联函数。内联函数是一种特殊的函数,可以在调用点展开为函数体中的代码,以减少函数调用的开销。通过将函数体直接插入到调用点,可以提高程序的执行效率。使用inline关键字修饰的函数,在编译时尽可能地进行内联展开,但并不保证一定内联。通常,内联函数适用于功能简单、调用频繁的函数。 总结起来,define是一个预处理指令,用于文本替换;const是一个关键字,创建只读的常量;inline是一个关键字,用于声明内联函数。它们的作用和使用方式不同,但都能在一定程度上增加程序的效率和可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值