在C++中,inline和#define有一些相似之处,但是二者的使用和实现均有区别之处,本文仅对实际使用中的一些区别做出总结。
总结来看:
处理阶段:宏定义define在预处理阶段就换成了字符串的替换,而inline在编译阶段进行。
类型安全检查:宏定义define是简单的字符串替换,不存在类型安全检查,而inline函数还是一个函数,编译器会进行类型安全检查,因此inline更加安全。
替换方式:宏定义define只是单纯的字符串替换,而inline是代码嵌入,也就是说编译器在函数调用的地方直接将inline函数代码写进去,这样就不会产生函数的调用跳转(无栈帧消耗),因此适用于短小的函数,并且安全可靠。
使用方式:宏定义define只要定义了就会替换,而inline只是建议,编译器可以拒绝替换,在函数较大的时候,编译器可以选择不展开相应的函数。
最后还要提醒一点:inline关键字必须在函数定义处,位于函数声明处则无效,因此一般将公共的inline函数的定义写在头文件中。