C++ inline 与#define 区别联系

来源:互联网 发布:linux运维之道 百度云 编辑:程序博客网 时间:2024/06/08 09:20

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

0 0
原创粉丝点击