内联函数与宏定义区别
- 内联函数在编译时展开,宏在预编译时展开
- 内联函数直接嵌入到目标代码中,宏是简单的做文本替换
- 内联函数有类型检测、语法判断等功能,宏没有
- inline函数是函数,宏不是
- 宏定义时要注意书写(参数要括起来)否则容易出现歧义,内联函数不会产生歧义
内联函数相比宏定义有哪些优越性
- inline函数代码是被放到符号表中,使用时像宏一样展开,没有调用的开销,效率很高;
- inline函数是真正的函数,所以要进行一系列的数据类型检查;
- inline函数作为类的成员函数,可以使用类的保护成员及私有成员。
为什么不能把所有的函数写成inline函数?
- 内联函数以代码复杂为代价,它以省去函数调用的开销来提高执行效率。如果内联函数体内代码执行时间相比函数调用开销较大没有太大的意义;
- 另一方面每一处内联函数的调用都要复制代码,消耗更多的内存空间,因此以下情况不宜使用内联函数:;
- 函数体内的代码比较长,将导致内存消耗代价
- 函数体内有循环,函数执行时间要比函数调用开销大