1、什么是内联函数?
inline修饰的函数称之为内联函数,内联函数是一种编程语言结构,在编译阶段在函数调用点代码直接展开。
2、内联函数如何工作的?
对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。(该段文字来自《高质量C++ C编程指南》)
3、内联函数的特点?
在编译阶段在函数调用点代码直接展开;
inline只在release版本中生效,对debug版本不起作用;
inline可以看做是给编译器的一个建议,至于要不要将函数处理为内联函数,有编译器自己决定;
(其中,递归、switch、循环一定不会被处理为内联)
inline加在函数声明上是没有意义的,inline是基于实现的,必须写在函数实现上;
定义在类声明中的成员函数将自动地成为内联函数;
4、inline函数的缺点?
内联函数是以代码膨胀为代价,仅仅省去了函数调用的开销,从而来提高执行效率,当函数开栈或清栈的开销小于执行的开销,用内联就不划算了;
不是所有函数都可以当做内联函数来处理;
5、inline函数和static函数的区别?
inline函数没有开栈和清栈的开销,而static函数有;
inline函数是因为在调用点代码直接展开,导致了只能在本文件使用,而static函数是因为修改了函数的属性,导致了只能在本文件使用;
6、inline和的define的区别?
inline处理是在编译阶段,有类型检查和安全检查,更安全(也可以把inline看做一种更安全的宏),define处理在与编译阶段,没有类型检查和安全检查;