个人学习笔记:inline函数与宏定义

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值