• 【C++】内联函数讲解和关键字inline纯干货简介


    今日翻看《C++ Primer Plus》,看到一个陌生的东西--内联函数,立马前来记录一下。

    内联函数和常规函数区别

    为了明白内联函数和常规函数的区别,首先需要知道程序运行时,遇到常规函数时如何处理的:

    编译过程的最终产品时可执行程序--由一组机器语言指令组成,运行程序时,操作系统将这些指令载入到计算机内存中,因此每条指令都有特定的内存地址,计算机随后逐步执行这些指令。

    常规函数调用的时候,使得程序跳到另一个地址,并在函数结束时返回。

    然而内联函数的编译代码直接与其它程序代码发生了“内联”,也就是说,程序无需跳到另一个位置执行代码。因此其运行速度比常规函数快,但是需要有更多内存。

    一图胜千言:

    inline关键字使用实例

    通常的做法是:将函数定义和函数原型写在一起放在main函数之前,前面加上关键字inline

    例子如下:

    1. #include
    2. inline double square(double x){
    3. return x*x;
    4. }
    5. int main()
    6. {
    7. using namespace std;
    8. double a,b;
    9. double c=13.0;
    10. a=square(5.0);
    11. b=square(4.5+7.5);
    12. cout<<"a="<",b="<
    13. cout<<"c="<
    14. cout<<",c squared="<<square(c++)<
    15. cout<<"Now c="<
    16. return 0;
    17. }

    运行结果:

    可以看出,内联函数和常规函数一样,也是按值传参

    内联与宏

    inline工具是C++新增的特性。C语言使用预处理器语句#define提供宏——内联代码的原始实现,例如:

    #define SQUARE(x) x*x

    这并不是通过传参实现的,而是通过文本替换实现的

    比如:b=SQUARE(4.5+7.5)会变成:b=4.5+7.5*4.5+7.5

    为了解决,可以添加括号,即:

    #define SQUARE(x) (x)*(x)

    但仍有一个问题,比如传入c++的时候,会让c递增两次

    所以如果使用C语言的宏执行类似函数的功能,应该考虑将其转换为内联函数

    对于那些频繁使用且体量小的函数,内联函数是一个非常不错的选择!

  • 相关阅读:
    JS的事件委托(Event Delegation)
    Java IO流概述和分类
    【Flutter】Flutter Web 开发 如何从 URL 中获取参数值
    快来手写RPC S2 序列化探究
    计算机网络(五)——UDP
    Python 自动化详解(pyautogui)
    Spring @Configuration 和 @Component 区别
    u盘损坏无法读取怎么恢复数据?
    9. 内核、文件系统加载工具
    你这个视频背景太假了?
  • 原文地址:https://blog.csdn.net/m0_63222058/article/details/132741103