#define和inline的区别(转)

发布时间 2023-05-07 15:50:44作者: 大黑耗

原文:https://blog.csdn.net/weixin_43870837/article/details/107350586

特性差异

对于两者的区别涉及到c与c++语言两者的差异性。
C++有着更加严格编译系统,这使得C++程序的错误在编译阶段即可发现许多问题,从而使得出错率大为减少。
也正是因为如此,c++中引入inline来代替define的功能。inline相比较于define有着更加强大的功能。

区别

#define
预编译时进行简单的字符替换,不进行类型检查等操作,保存在预编译器的符号表中。
#inline
为了替代define功能成为真正出函数,调用时有严格的参数检测;它也可作为类的成员函数,保存在预编译器的符号表中。

inline优缺点

优点:inline函数是一个真正的函数,它可以进行参数检测,相比较于普通函数,它的执行效率上更加快速
缺点:浪费内存。inline函数在函数调用的地方会在预编译的时候生成一份函数的拷贝,也就是说,只要有调用inline函数的地方,就会生成一处拷贝而普通的函数在函数调用的地方只是存储了此函数的地址

总结

inline函数可以说是对编译器进行提出建议,是否最终成为内联函数做最后的替换操作编译器说了算,编译器有权拒绝。

因此inline函数一般内容也就几行,行数过多的话相比较于inline函数的优点,它所暴露出的缺点更加严重(内存占用过大),也就是这个原因,对于规模较大的inline函数编译器可以拒绝其成为内联函数而退化成普通函数使用。