1.define:定义预编译时处理的宏;
只进行简单的字符替换,无类型检测
2.inline: 内联函数对编译器提出建议,是否进行宏替换,编译器有权拒绝既为提出申请,不一定会成功
inline
1) 产生背景
inline这个关键字的引入原因和const十分相似,inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中
表达式形式的宏定义。
表达式形式的宏定义一例:
#define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2)
这种表达式形式宏形式与作用跟函数类似,但它使用预编译器,没有堆栈,使用上比函数高效。但它只是预编译器上符号表的简单替换,不能进行参数有效性检测及使用C++类的成员访问控制。
inline 推出的目的,也正是为了取代这种表达式形式的宏定义,它消除了它的缺点,同时又很好地继承了它的优点。inline代码放入预编译器符号表中,高效;它是个真正的函数,调用时有严格的参数检测;它也可作为类的成员函数。
2) 具体作用
直接在class类定义中定义各函数成员,系统将他们作为内联函数处理;成员函数是内联函数,意味着:每个对象都有该函数一份独立的拷贝。
在类外,如果使用关键字inline定义函数成员,则系统也会作为内联函数处理;
#define 宏名要替换的代码
宏定义,保存在预编译器的符号表中,执行高效;作为一种简单的符号替换,不进行其中参数有效性的检测
typedef 已有类型 新类型
别名, 常用于创建平台无关类型, typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。