zoukankan      html  css  js  c++  java
  • [C++] inline内联函数使用方法

    C++支持内联函数,目的是为了提高函数的执行效率,类似于C语言中的宏定义

    内联函数在调用时将它在程序中的每个调用点展开,不用额外分配栈空间

    内联函数的定义在一个源文件中出现一次,但在多个源文件中可以同时出现,只要保证完全相同即可。

    所以内联函数可以直接在头文件中定义,即使被多次包含,也是完全相同的,因此不会报错。

    inline 内联函数的使用方法:

    inline 放在函数定义的返回值前面,就可以将函数指定为内联函数;仅仅放在声明函数前面时无效的

    inline 返回值 函数名(形参)
    {
        函数体
    }

    举例:

    #include <iostream>
    
    using namespace std;
    
    // add 函数定义时有inline,声明时没有inline,但依然是内联函数
    int add(int a, int b);
    // dec 函数定义时没有inline,声明时有inline,但依然不是内联函数
    inline int dec(int a, int b);
    
    inline int add(int a, int b)
    {
        return (a + b);
    }
    
    int dec(int a, int b)
    {
        return (a - b);
    }
    
    int main(void)
    {
        // 调用add(2, 3)时直接被替换为(2 + 3)
        cout << add(2, 3) << endl;
        // 调用时不会替换,要进行压栈出栈操作
        cout << dec(5, 3) << endl;
    
        return 0;
    }

    注意:

    1、内联函数以代码增大的代价减少函数调用的开销,禁止滥用,只有函数体简单短小,才可以使代码更加高效

    2、如果函数代码较长或有循环语句,使用内联函数会增大内存的消耗,不能使用内联函数

    宏定义与内联函数的区别

    1、宏定义是由预处理器控制实现,而内联函数是通过编译器控制实现

    2、宏定义在预处理时就对其进行展开替换,而内联函数是在调用时对其展开替换

    3、内联函数是真正的函数,但使用时像宏定义一样展开,取消了函数的参数压栈出栈的开销

    4、宏定义不检查参数返回值等,只是对其展开,而内联函数会检查参数返回值等,相对更安全

    5、宏定义在运行时不可以调试,而内联函数可以

  • 相关阅读:
    Asp.net 中 OnClientClick 与 OnClick 的区别
    WPF + RDLC + Tablix动态生成列 + 表头合并
    统计表用于查询效果太差的情况
    TeamView WaitforConnectFailed错误原因
    瞄到BindingGroup用法
    最讨厌工作时候百度的信息
    Lambda获取类属性的名字
    附加属性作用于多选控件,用于获取所有选中项
    文件夹图标错落解决方案
    WPF Line 的颜色过度动画
  • 原文地址:https://www.cnblogs.com/lialong1st/p/12006748.html
Copyright © 2011-2022 走看看