内联函数与宏
内联函数有什么作用?存不存在什么缺点?
(1)作用是使编译器在函数调用点上展开函数,可以避免函数调用的开销; 调用函数的开销大致可分两个部分: - 传递参数的开销和保存当前程序上下文信息所花费的开销。对于传递参数的开销而言,传递的参数越多开销就越大;对于保存当前程序上下文所花费的开销而言,函数越复杂需要花费的开销就越大。
(2)内联函数的缺点是可能造成代码膨胀,尤其是递归的函数,会造成大量内存开销,exe 太大,占用 CPU 资源。此外,内联函数不方便调试,每次修改会重新编译头文件,增加编译时间。
- 内联函数和宏有什么区别,有了宏为什么还需要内联函数?
(1)define 宏命令是在预处理阶段对命令进行替换,inline 是在编译阶段在函数调用点处直接展开函数,节省了函数调用的开销;
(2)类型检查:define 的话是不会对参数的类型进行检查的,因此会出现类型安全的问题,比如定义一个 max 命令,但是传递的时候可能会传递一个整数和一个字符串,就会出错,但是内联函数在编译阶段会进行类型检查;
(3)使用宏的时候可能要添加很多括号,比较容易出错。