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 函数适合写在头文件,多文件引用不报错

相关推荐
Aurorar0rua11 小时前
CS50 x 2024 Notes Python - 02
开发语言·python·学习方法
zyseo811 小时前
谷歌SEO 网站迁移 301 映射脚本:旧站 URL 自动匹配新站结构
开发语言·python
cu14311 小时前
细谈IT65631的具体功能与其应用
c++·单片机·嵌入式硬件
清水白石00811 小时前
React Native与Flutter长期维护成本对比
开发语言·数据库
幻智星科技11 小时前
Karatsuba与CSD优化FPGA大数乘法
c++·fpga开发·密码学
麦序子11 小时前
用 Python + python-docx 批量生成带表格样式的装修报价单 Word 文档(含合计公式)
开发语言·python·自然语言处理·word·python3.11
1-1=011 小时前
Python PyCharm
开发语言·python·pycharm
牛肉胡辣汤12 小时前
Blender + Three.js 开发讲解:从 .blend 到能转的产品页
开发语言·javascript·blender
惊讶的猫12 小时前
Spring AOP
java·开发语言
flower98032312 小时前
C++消息总线软件开发框架AI重构版
c++·设计模式·架构