宏define
定义预编译时的宏只是在编译阶段进行简单的代码替换,多用于
定义表达式和常量。
优点:1.定义的宏就是在编译阶段替换,不会像普通函数那样涉及到
2.参数的出栈和入栈,这样效率就高
缺点:1.这种宏定义在形式上类似于一个函数,但是在使用的时候,仅仅
是在做预处理器符号表中的简单替换
2.不能对参数进行有效性的检测(只是简单文本替换,不是参数传递)
3.并且它的返回值不能被强制转换成可转换的合适的类型;
4. 宏不能进行调试,会使代码变长
inline 内联函数
在一个函数的前面加上inline,这个函数就是内联函数,在运行时调用位置展开函数代码;
内联函数使用场景:函数使用频繁,代码内没有递归或者循环,代码量小
特点:类中的成员函数是默认的内联函数
内联函数的定义必须出现在第一次调用内联函数之前
优点:
1.有类型检测,更加的安全
2.内联函数是在程序运行时展开而且进行的时参数传递
3.编译器会检测内联函数是否满足要求,若不满足就当普通函数使用
(内联函数不能递归,)
缺点:
代码量变大,占用内存增多
两者进行对比:
相同点:两者都是加快程序运行效率
不同点:1.内联函数调用是传参,宏定义只是简单的文本替换
2.内联函数是在程序运行函数调用处展开代码,宏定义是在程序编译时进行替换
3.内联函数有类型检测更加安全,宏定义没有类型检测
4.内联函数在运行时可以调试,宏定义不可以
5.类中的成员函数是默认的内联函数
6.内联函数可以访问类的成员变量,宏不可以