一、宏的优缺点。
程序调用宏的时候,只是在宏预处理的地方把代码展开,不需要像函数调用那样,必须在调用前保存现场,调用后恢复现场,需要一定的空间和时间。因此宏调用更具效率。
但是宏也有很多的不尽人意的地方。
1、宏不能访问对象的私有成员。
2、宏的定义很容易产生歧义。
二、内联函数不仅保留宏的优点,还进一步完善了宏的缺点。
内联函数和宏的区别在于,宏是由预处理器对宏进行替代,而内联函数是通过编译器控制来实现的。而且内联函数是真正的函数,只是在需要用到的时候,内联函数像宏一样的展开,所以取消了函数的参数压栈,减少了调用的开销。你可以象调用函数一样来调用内联函数,而不必担心会产生于处理宏的一些问题。
用法:
1、内联函数必须是和函数体的实现在一起定义。
2、内联函数如果过大,就失去了意义了,跟一般函数调用效率就一样了,因此一般用于简单的类读写操作。
例:
Class CTest{
private:
int nNum;
public:
int Add(){ return nNum++;}// 是内联函数,不管有没有加“inline”关键字
inline int Sub(){return nNum--;}// 是内联函数
inline int GetNum();// 不是内联函数,不管是否加了“inline”关键字
};
但是如果在类的实现部分添加“inline”关键字,则该函数就是内联函数:
inline CTest::GetNum(){return nNum;}// 是内联函数