0%

C++中inline和#define的区别总结

在C++中,inline和#define有一些相似之处,但是二者的使用和实现均有区别之处,本文仅对实际使用中的一些区别做出总结。

总结来看:

  • 处理阶段:宏定义define在预处理阶段就换成了字符串的替换,而inline在编译阶段进行。

  • 类型安全检查:宏定义define是简单的字符串替换,不存在类型安全检查,而inline函数还是一个函数,编译器会进行类型安全检查,因此inline更加安全。

  • 替换方式:宏定义define只是单纯的字符串替换,而inline是代码嵌入,也就是说编译器在函数调用的地方直接将inline函数代码写进去,这样就不会产生函数的调用跳转(无栈帧消耗),因此适用于短小的函数,并且安全可靠。

  • 使用方式:宏定义define只要定义了就会替换,而inline只是建议,编译器可以拒绝替换,在函数较大的时候,编译器可以选择不展开相应的函数。

最后还要提醒一点:inline关键字必须在函数定义处,位于函数声明处则无效,因此一般将公共的inline函数的定义写在头文件中。