C++中设计inline函数目的:
用它***替代C中表达式形式的宏定义***:#define。
内联函数作用:
定义inline函数即推荐编译器将函数定义放在调用此内联函数位置,提高代码运行速度,但以运行内存为代价。
宏定义:#define缺点
1、仅是做预处理器符号表中的简单替换,无参数有效性检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型。因此存在隐患。
2、无法操作C++中私有、保护成员:在C++中引入了类及类的访问控制,这样,如果一个操作或者说一个表达式涉及到类的保护成员或私有成员,你就不可能使用这种宏定义来实现(因为无法将this指针放在合适的位置)。
内联函数使用
1.在类中定义:
class ClassName{
....
ClassName(){ } //构造、析构函数往往不是内联函数的优秀候选对象
// 因为构造函数包含每一个成员变量的构造代码,同时包括构造过程存在异常时的成员变量析构代码
// 与异常抛出代码等等
int GetWidth() {return m_lPicWidth;};
....
}
注意:在类中直接定义,可以不用inline修饰,编译器自动化为内联函数。
2.在类外定义前加inline关键字:
inline int GetWidth() {return m_lPicWidth;};
注:a) 内联函数的定义要在头文件中,因为大部分编译器,在编译期完成内联过程,此过程需要知道函数本体的样子,因此在头文件中可以找到。只有少部分编译器在链接期进行内联过程。
也可以放在cpp文件中,但需要在.h文件包含cpp文件(复杂不推荐)。
b) template
模板也要放在头文件中。因为编译器为了将其具体化,需要知道其长什么样子。
总结:
1、用内联函数代替宏定义,减少代码错误,增强可读性。
2、内联函数和template模板的定义都要放在头文件中。
参考链接
https://baike.baidu.com/item/inline/10566989?fr=aladdin