宏(#define)和内联函数(inline)的理解以及区别:
-
宏
缺点:
1.宏没有类型检测,不安全
2.宏是在预处理时进行简单文本替换,并不是简单的参数传递(很难处理一些特定情况。例如:Add(z++))
3.使代码变长
4.宏不能进行调试
5.当预处理搜索#define定义的符号时,字符串常量并不被搜索
优点:
1.加快了代码的运行效率
2.让代码变得更加的通用
-
内联函数
特点:
(1.)类中的成员函数是默认的内联函数
(2.)内联函数内不准许有循环语句和开关语句
(3.)内联函数的定义必须出现在第一次调用内联函数之前
缺点:
代码变长,占用更多内存
优点:
1.有类型检测,更加的安全
2.内联函数是在程序运行时展开,而且是进行的是参数传递
3.编译器可以检测定义的内联函数是否满足要求,如果不满足就会当作普通函数调用(内联函数不能递归,内联函数不能太大)
-
对比
相同点:
两者都是可以加快程序运行效率,使代码变得更加通用
不同点:
1.内联函数的调用是传参,宏定义只是简单的文本替换
2.内联函数可以在程序运行时调用,宏定义是在程序编译进行
3.内联函数有类型检测更加的安全,宏定义没有类型检测
4.内联函数在运行时可调式,宏定义不可以
5.内联函数可以访问类的成员变量,宏不可以
6.类中的成员函数是默认的内联函数