内联函数(#define)/宏定义(#define)
1.宏是由预处理器对宏进行替代;而内联函数是通过编译器控制来实现的
2.宏定义只是简单的文本替换,内联函数直接被嵌入到目标代码中去
3.宏定义不是真正的函数,没有参数类型检查,不安全;而内联函数是真正的函数,有类型检查,更为安全
5.宏在定义是要注意参数,一般用括号括起来,否则容易出现二义性,而内联函数不会出现二义性
两数比大小为例子来看内联函数和宏
宏的优点:
1.提高程序可读性,方便进行修改
2.使用带参数的宏定义既可以完成函数调用的功能,又可以避免函数的出栈入栈操作,减少系统开销,提高运行效率
3.宏是由预处理器处理的,通过字符串操作可以完成很多编译器无法实现的功能,比如##连接符
缺点:
1.不能访问私有成员
2.宏的定义容易产生二义性
3.宏定义没有参数检查不安全
内联函数的优点:
1.直接将代码插入调用处,减少普通函数调用时的资源消耗
2.有参数检测更安全
3.inline关键字只是对编译器的一个定义,如果函数不符合内联函数的标准,编译器就会把这个函数当成普通函数
缺点:
1.内联函数以复制为代价,活动产生开销
2.如果函数代码过长,使用内联函数会消耗过多内存
3.如果内联函数体有循环,执行函数代码时间调用开销大