记:C++基础之二、内联函数``inline``

GitHub C++基础知识

二、内联函数inline

  • 内联函数一般是小型的一至五行左右,且频繁调用的函数。与C语言中的#define类似。
inline int max(int a, int b) {
    return a>b?a:b;
}

2.1. 原理

当编译器看到inline后,为该函数创建一段代码,以便在以后每次碰到该函数调用时都用一段代码来替换。

  • 这样可以避免频繁调用函数对栈内存重复开辟所带来的消耗,降低调用成本。
  • 然而这样也会增加可执行文件的大小。

2.2. 特点

  1. 相当于把函数里面的内容写在调用函数处。
  2. 不用进入函数的步骤,直接进入函数体。
  3. 相当于宏,但比宏多了类型检测,真正具有函数特性。
  4. 不能包含循环、递归、switch等复杂操作。
  5. 在类中定义的成员函数,除了虚函数,其他的函数都会隐式地当成内联函数。

2.3. 内联函数的缺点

  1. 内联函数会增加可执行文件的大小。
  2. 内联函数的改变需要重新编译,不能直接链接。
  3. 是否内联是不可控的,取决于编译器。

2.3. inline#define的区别

  1. 宏代替小函数有缺陷
inline int max(int a,int b) {
    return a>b?a:b;
}
#define MAX(a,b) ((a)>(b)?(a):(b))

a>b,则对于上面的内联和宏定义,max(a++)≠MAX(a++,b)
。对于左边内联函数返回的是a(使用的是未加之前的a),而对于右边宏定义→a++>b?a++:b返回的是(a+1)++,即a+1

  1. 内联函数会做类型检测或自动类型转换,宏定义不会。
  2. 类中声明、类中定义的成员函数,后者会自动转换为内联函数,可以访问成员变量,而宏定义的函数不可以。
  3. 内联函数在运行期间可以调试,而宏不可以。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值