C++:内联函数
一、函数宏的缺陷
1、为保证运算完整性,须加括号。
#define MAX(x, y) ((x)>(y) ? (x) : (y))
2、即使加了括号,有些情况也与预期结果不符。
#include <iostream>
using namespace std;
#define MAX(x, y) ((x)>(y) ? (x) : (y))
int main()
{
int i = 10;
int j = 20;
int a = MAX(i, ++j); // a = (i) > (++j) ? (i) : (++j); 预期结果为21,实际为22.
cout<<"a = "<<a<<endl;
return 0;
}
3、宏函数,不重视作用域。
二、内联函数的声明与定义
内联函数声明:inline 返回类型标识符 函数名(形参列表及形参标识符);
内联函数定义:inline 返回类型标识符 函数名(形参列表及形参标识符){函数体}
注意:1、须函数声明和函数定义同时加有关键字inline才算内联函数;
2、编译器处理内联函数时,直接将内联函数代码拷贝一份到内联函数调用处;
3、类内部成员函数,默认加上关键字inline。
三、内联函数与编译器关系
1、关键字inline,只是对编译器的一个建议,有些情况下加有关键字inline,编译器也不会将该函数做内联函数处理;
2、函数体内存在循环、判断,函数体过于庞大及须对函数取地址,inline函数不是按内联函数处理;
3、一个好的编译器,会将短小的函数,隐式加入关键字inline。
四、总结:
代码编写时,无须特意为函数加上关键字inline。