C++ 知识点06 inline

C++ inline 内联函数

一、什么是 inline 内联函数

普通函数 :调用时要 跳转→执行→返回,有函数调用开销。

inline 内联函数:

编译时把函数代码直接原地嵌入到调用处 ,省去函数跳转开销,提升执行效率。

一句话:用代码替换函数调用,不跳转、省开销。

二、基础语法

cpp 复制代码
inline 返回值 函数名(参数列表)
{
    // 函数体
}

三、基础示例代码

cpp 复制代码
#include <iostream>
using namespace std;
​
// 定义内联函数
inline int add(int a, int b)
{
    return a + b;
}
​
int main()
{
    // 编译时直接把 add(a,b) 替换成 a+b 代码
    cout << add(10, 20) << endl;
    cout << add(5, 6) << endl;
​
    return 0;
}

编译器处理后等价于:

cpp 复制代码
cout << 10 + 20 << endl;
cout << 5 + 6 << endl;

没有函数调用跳转,直接原地展开。


四、为什么要用 inline?

  1. 省去函数调用的栈开辟、跳转、返回开销

  2. 代码短小、频繁调用的函数,用 inline 性价比最高

  3. 比 #define 宏更安全、有类型检查、可调试


五、类内成员函数 默认就是 inline

写在类里面直接定义的成员函数,自带 inline 属性,不用手动加。

代码演示:

cpp 复制代码
#include <iostream>
using namespace std;
​
class Person
{
public:
    // 类内定义,默认隐式 inline
    void show()
    {
        cout << "我是类内默认内联函数" << endl;
    }
};
​
int main()
{
    Person p;
    p.show();
    return 0;
}

如果类内声明、类外定义 ,要手动加 inline:

cpp 复制代码
#include <iostream>
using namespace std;
​
class Person
{
public:
    void show(); // 类内声明
};
​
// 类外定义,必须加 inline
inline void Person::show()
{
    cout << "手动加 inline" << endl;
}
​
int main()
{
    Person p;
    p.show();
    return 0;
}

六、inline 适用场景 & 不适用场景

✅ 适合用 inline

  • 函数代码很短(1~5 行)

  • 被频繁调用(循环里多次调用)

  • 简单计算、取值、设置值函数

❌ 不适合用 inline

  • 函数体代码很长

  • 包含 循环、if 多分支、递归、switch

  • 虚函数(多态)

编译器有内敛优化 :你写了 inline,它觉得不合适也会自动变成普通函数,不保证一定内联。


七、inline 函数规则(必记)

  1. inline 函数定义要放头文件,多个文件包含也不会报重复定义错误

  2. 不能定义递归内联函数

  3. 包含循环、复杂逻辑不建议 inline

  4. 只是建议编译器内联,不是强制(编译器有权拒绝)

演示:多文件共用 inline

同一个项目多个 .cpp 调用同一个 inline 函数,不用怕重复定义,这是 inline 特性。


八、inline 函数 VS 宏定义 #define

1. 宏写法(不安全)

cpp 复制代码
#define ADD(a,b) a+b

坑:无类型检查、优先级容易出错、容易产生诡异 bug。

2. inline 写法(安全)

cpp 复制代码
inline int add(int a, int b)
{
    return a + b;
}

区别总结:

特性 宏 #define inline 内联函数
类型检查 无 有
安全度 低,易出 bug 高
可调试 不可调试 可调试
作用 纯文本替换 类型安全代码展开

代码对比坑点:

cpp 复制代码
#include <iostream>
using namespace std;
​
#define MUL(x) x*x
inline int mul(int x) { return x*x; }
​
int main()
{
    // 宏:3+2*3+2 = 11  出错
    cout << MUL(3+2) << endl;
​
    // 内联函数:(3+2)*(3+2) = 25 正常
    cout << mul(3+2) << endl;
​
    return 0;
}

运行结果:

cpp 复制代码
11
25

一眼看出:宏有语法坑,inline 更安全。


九、知识点一句话总结

  1. inline 作用:小函数原地展开,省去调用开销

  2. 类内直接定义的成员函数 默认隐式 inline

  3. inline 是给编译器建议,不强制

  4. 短小、频繁调用的函数用 inline;有循环、递归、代码长别用

  5. 比宏 #define 更安全、有类型检查、可调试

  6. inline 函数适合写在头文件,多文件引用不报错

相关推荐
可乐鸡翅yeah_几秒前
M3U8 防盗链 URL‑Token 签名,新手开发实操避坑
开发语言·javascript·ios·音视频·safari
ShineWinsu4 分钟前
对于Redis:string类型的解析
java·c++·redis·分布式·缓存·面试·string
2603_9658966211 分钟前
JS原型与原型链|对象继承与实例底层原理
开发语言·javascript·原型模式
拉格朗日(Lagrange)14 分钟前
【第2 章】WorkBuddy 从入门到高手
开发语言·python
yujunl16 分钟前
在U9C订单列表上开放多个按钮层叠的问题解决
开发语言
喆星时瑜36 分钟前
Win10/11 安装 R 与 RStudio 详细图文教程
开发语言·r语言·安装
心中有你02141 小时前
【路径规划】A*寻路算法最通俗易懂讲解(C语言完整实现+详细注释)
c语言·开发语言·算法
YYYing.1 小时前
【设计模式系列 (七) 】桥接模式
c++·后端·设计模式·桥接模式
言乐61 小时前
Python自动去除水印
开发语言·python·django·virtualenv·pygame
大圣编蚕1 小时前
C语言入门:基本语法汇总
c语言·开发语言