• 内联函数 inline


    有时候需要频繁调用一些函数,而编译器在调用函数的时候会消耗栈空间。为了解决这种问题,我们可以使用关键字 inline

    举个栗子

    这是我们熟悉的函数

    int sum(const int &a,const int &b)
    {
        return a + b;
    }
    
    int main(int argc, char const *argv[])
    {
        int a(5);
        int b(7);
        std::cout<<sum(a,b)<<std::endl;
        return 0;
    }

    这种相加的函数我们很有可能随时都要用到,可能在一个程序中要调用几十次

    所以可以在函数定义上加一个inline

    inline int sum(const int &a,const int &b)
    {
        return a + b;
    }
    
    int main(int argc, char const *argv[])
    {
        int a(5);
        int b(7);
        std::cout<<sum(a,b)<<std::endl;
        return 0;
    }

    inline告诉编译器,这个函数在调用的时候,可以直接复制代码给调用的函数,这样更节省栈空间

    至于编译器会不会真的这样做,那我们就无法控制了,inline只是一个建议

    inline要放在定义里面

    如果只有声明里有inline 定义里没有,那么这个inline不起作用

    比如下面这个例子,是无效的。

    inline int sum(const int &a,const int &b);
    
    int sum(const int &a,const int &b)
    {
        return a + b;
    }

    什么情况下使用inline
    函数很简单,并且需要多次调用

    什么情况不能使用inline

    (1) 如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
    (2) 如果函数体内出现循环,那么执行函数体内代码的时间要比函数调用的开销大。
    (3) 类的构造函数和析构函数容易让人误解成使用内联更有效。要当心构造函数和析构函数可能会隐藏一些行为,如“偷偷地”执行了基类或成员对象的构造函数和析构函数。所以不要随便地将构造函数和析构函数的定义体放在类声明中。

  • 相关阅读:
    Spring4 MVC json问题(406 Not Acceptable)
    java 从网络Url中下载文件
    Java基础知识(一) 自增、自减运算符
    java文件读写操作
    java集合运算:求交集,并集,集合差
    httpclient+jsoup实现网页信息抓取
    java web使用gradle配置详情
    关于mysql登录异常处理方法
    windows server 2012 r2 远程桌面连接指南
    Java生成带小图标的二维码-google zxing 工具类
  • 原文地址:https://www.cnblogs.com/qifeng1024/p/12624609.html
Copyright © 2020-2023  润新知