内联函数使用的是inline标识函数,是一种利用适度的空间膨胀来换取较高的执行速度,内联函数与预处理宏有相同
的地方,编译器会在调用内联函数的地方将函数展开直接将内联函数代码嵌入调用的地方,这样解决了使用预处理宏函数
的缺陷.
#define max(a,b) ((a) > (b) ? (a) : (b)) //要是这也做变量要加括号,不然后果很难知道
如在使用的过程中,int a = 5,b = 4;
max(++a,b); //a自加2次,执行比较一次,输出一次
max(++a,b+5); // a自加1次,就比较那一次
可以使用函数实现这个预处理宏函数,使用模板可以适用任何类型
template<class T>
inline const T& max(const T& a, const T& b)
{
return (a > b ? a : b);
}
将类的成员定义为内联函数,有两种方式,一种是声明函数在类中,定义在类外时,在定义函数时,在函数前加上
inline标识,另外一种是直接在类中定义,默认为内联函数
class A
{
private:
int i;
public:
A(int i){this.i = i} //默认为内联函数
void print();
};
inline void A::print()
{
std::cout<< i << std::endl;
}
在使用内联函数时,每次调用内联函数,内联函数都将展开,每次内存中都会存在增加一份内联函数代码内存空间,所
以如果代码数据比较大时不要经常调用内联函数,而且当内联函数代码处理的数据比较多时,编译器一般是把内联函数当
成普通函数编译.