内联函数

宏函数的缺陷:

必须要加括号保证运算完整

即使加括号,有些运算依然与预期结果不符

预定义宏函数没有作用域概念,无法作为一个类的成员函数,也就是说预定义宏没有办法表示类的范围。

内联函数基本概念

在C++中,用内联函数来实现宏函数的处理方式。但是内联函数本身也是一个真正的函数。内联函数具有普通函数的所有行为,区别在于内联函数会在合适的地方进行类似宏函数的进行展开。

普通函数定义内联函数

在普通函数前面添加inline关键字变成内联函数,但是必须把函数体和申明放在一起

inline void func(int a);//这样是错误的

inline void func(int a)
{
return a++;
}//把申明和实现放在一起才行

类中的内联函数

任何在类中定义的函数都是默认为一个内联函数

内联函数和编译器

内联函数如果太庞大了就不会有效了,所以编译器需要来处理。

所以在一些特殊情况下,写了关键字inline也不会按照内联函数的方式来处理:

循环

判断

函数体过于庞大

对函数进行取地址

总结:

内联函数只是给编译器一个建议,但是编译器不一定接受这个建议,好的编译器会自己给短小的函数前加上关键字inline