内联函数
在C++中宏函数的概念是使用内联函数来实现的,而无论从哪一方面来说,内联函数都是真正的函数。唯一不同之处是内联函数在适当的地方像宏一样展开,所以不需要函数调用的开销。
任何在类中定义的(在花括号内)函数会自动地成为内联函数;
- 开栈的开销 > 执行的开销 建议设为inline
- 开栈的开销 < 执行的开销 不建议 代码膨胀
注意事项
-
对于那些函数体代码量很小,又经常调用的函数,一般用作内联函数。因为函数体代码很小,函数体执行的时间远小于调用函数的时间,从而提高代码执行效率。
-
一般建议少用宏定义,改用内联函数。因为宏定义容易出错(如边界错误),而且宏定义只是编译时简单的替换,而内联函数含有类型安全检查和自动类型转换,这些是宏定义没有的。宏定义还有另一个缺点:无法操作类的私有数据成员。
-
内联支持调试,宏定义不支持调试(assert除外)。宏定义只是简单的替换,内联在debug时相当于普通函数,此时并没有真正的内联,可以参与调试,在release时,才真正内联。 debug不是
-
inline关键字是“定义型关键字”,inline只有写在定义前时,才是内联函数,如果inline仅写在声明前,而定义前没有的话,不算内联。