目录

inline函数定义

使用风格

为什么要使用内联函数

内联函数的一些使用建议


inline函数定义

在函数声明或定义返回值类型前添加关键字inline即将函数指定为内联函数

inline int max(int a,int b)

使用风格

关键字inline必须放在定义体前才能将成为函数内联函数,否则不起作用

例如:

inline int max(int a, int b);

int max(){

函数体

}

为什么要使用内联函数

在我们的代码中可能经常会遇到一种场景需要大量频繁得调用函数。调用函数就会为其创建栈空间,如果频繁的调用会给内存很大的压力,消耗大量的栈空间,inline函数可以缓解这个问题。

例如下面的代码:

inline int sub(int a,int b) {return a+b;
} int main()
{int i = 0;for (i=1; i < 100; i++) {printf("the sub is %d\n",sub(i,i+1));    }
}

循环 调用100次sub()函数,如果sub函数不声明为inline,系统会创建100次栈空间。但是这里我们将sub()函数声明成inline函数之后,任何调用sub()的地方都换成了"a+b",这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。

C++的”函数内联”工作方式

1.对于任何内联函数,编译器在符号表里放入函数的声明(包括名字、参数类型、返回值类型)。
2.如果编译器没有发现内联函数存在错误,那么该函数的代码也被放入符号表里。
在调用一个内联函数时,编译器首先检查调用是否正确(进行类型安全检查,或者进行自动类型转换,当然对所有的函数都一样)。
3.如果正确,内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销。

内联函数的一些使用建议

内联函数能提高函数的执行效率,那是否任何情况下都可以使用内联函数?这是不行的。

1.内联是以代码膨胀为代价,省去了函数调用的开销,提高函数的执行效率。如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。所以一般在在函数频繁调用且函数内部代码很少的情况下使用。
2.每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。
3.一个好的编译器将会根据函数的定义体,自动地取消不值得的内联。

4.建议把inline函数的定义放到头文件中。在每个调用该inline函数的文件中包含该头文件。

类中的成员函数和inline 

定义在类中的成员函数默认都是内联的,如果在类定义时就在类内给出函数定义,那当然最好。如果在类中未给出成员函数定义,而又想内联该函数的话,那在类外定义上要加上inline,否则就认为不是内联的。

例如: 

class A
{public:void sub(int x, int y);
}inline void A::sub(int x, int y){
函数体
} 

end 

C++ inline函数相关推荐

  1. 关于inline函数

    (一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...

  2. C++ inline函数和宏

    1. 内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: int max(int a, int b) {return a > b ? a : b; } 为这么一个小的操作定义一个函数 ...

  3. inline函数使用容易导致出错的问题

    对于inline函数,首先应该要短小(inline只是对编译器的一个建议,编译器是可以忽略的),其次inline函数的定义一定要与调用它的部分在同一个源文件里,不同的源文件可以分别定义一个相同inli ...

  4. inline函数学习笔记

    一.c++ inline函数产生原因 由于函数调用会有一定的时间和空间方面的开销,特别是对于一些函数体代码不大但又被频繁调用的函数来讲,效率是很低的. 在C语言中,可以用宏函数来提高上面那种情况的效率 ...

  5. C++的inline函数

    C++中使用const 变量替换宏定义 当然C++中也有使用inline 函数替换宏代码片段: #include <iostream>using namespace std;inline ...

  6. html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同

    sql over开窗函数 和group by的区别 / 蓝讯如果有多个聚合函数,但是分组依据不同,此时只能使用开窗函数. 而GROUP BY要求聚合函数的分组依据一致. SQL Server中的开窗函 ...

  7. C++的优秀特性2:inline 函数

    (转载请注明原创于潘多拉盒子) Inline函数是C++的一个很小的特性,在不计较效率的情况下,这个特性似乎可有可无.然而,C++天生是为最为广泛的应用场景设计的,因此,总会有关于效率的问题.其实,除 ...

  8. 【转】 嵌入式C语言编程中Inline函数的应用

    源地址:https://blog.csdn.net/vigour1000/article/details/9622037 有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状 ...

  9. Inline函数使用注意事项

    Inline函数使用注意事项 1.在一个文件中定义的inline函数不能再另一个文件中使用 2.inline函数应简洁,只有少数几个语句. 3.在inline函数中不能有循环,if,switch语句. ...

  10. C++之inline函数

    1.为什么需要inline C中的宏没有调用,参数压栈.返回操作所以比函数快,但是有参数副作用,inline为了取代这种表达式形式的宏定义,它消除了宏定义的缺点,同时又很好地继承了宏定义的优点.   ...

最新文章

  1. 基于Tkinter利用python实现颜色空间转换程序
  2. 云时代服务器端工程师必备 CDN 技能包
  3. 自己实现spring核心功能 三
  4. 初识图机器学习(part5)--图表示学习2.0
  5. python string类型_Python的基本数据类型——String
  6. “小众”之美——Ruby在QA自动化中的应用
  7. spark mysql 交互_Spark - 直接操作数据源 MySQL
  8. 点货网 x mPaaS | 仅 2 位 Java 开发,使用小程序上线一款 App
  9. Java基础入门笔记-对象的销毁
  10. 福大软工1816 · 第一次团队作业
  11. 谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘
  12. centos7改语言包
  13. NAS和私有云盘的区别?1篇文章说清楚
  14. 关于电商平台推出无门槛优惠券不得不说的几个问题
  15. mvn 默认scope_Maven依赖中的scope详解
  16. Android软键盘弹出和收起的监听
  17. S9013驱动直流电机原理图
  18. 【JMX】1. 什么是JMX、JDK中的JMX实现
  19. 十三、MySQL数据库
  20. 惠鑫云安全稳定为什么说澳元是高息钱银?高息钱银有哪些

热门文章

  1. Office 产品 Office Professional Plus 2010
  2. Excel行高、列宽怎么调整?
  3. 产品更新频繁线下培训成本高?华为云会议助力企业降本增效
  4. Mybatis之分页插件
  5. LeetCode:278(Python)—— 第一个错误的版本(简单)
  6. python计算均方根误差_scikit学习:如何计算均方根误差(RMSE)的百分比?
  7. Simulink —— Band-Limited White Noise模块的使用
  8. win10实现“我的电脑”显示到桌面
  9. java如何调用第三方接口
  10. 二叉树左右子树的交换并显示(C++实现)