C++ inline函数
目录
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函数相关推荐
- 关于inline函数
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联. inline int min(int first, int ...
- C++ inline函数和宏
1. 内联函数 在C++中我们通常定义以下函数来求两个整数的最大值: int max(int a, int b) {return a > b ? a : b; } 为这么一个小的操作定义一个函数 ...
- inline函数使用容易导致出错的问题
对于inline函数,首先应该要短小(inline只是对编译器的一个建议,编译器是可以忽略的),其次inline函数的定义一定要与调用它的部分在同一个源文件里,不同的源文件可以分别定义一个相同inli ...
- inline函数学习笔记
一.c++ inline函数产生原因 由于函数调用会有一定的时间和空间方面的开销,特别是对于一些函数体代码不大但又被频繁调用的函数来讲,效率是很低的. 在C语言中,可以用宏函数来提高上面那种情况的效率 ...
- C++的inline函数
C++中使用const 变量替换宏定义 当然C++中也有使用inline 函数替换宏代码片段: #include <iostream>using namespace std;inline ...
- html中inline函数,开窗函数和窗口函数区别 inline函数和一般的函数有什么不同
sql over开窗函数 和group by的区别 / 蓝讯如果有多个聚合函数,但是分组依据不同,此时只能使用开窗函数. 而GROUP BY要求聚合函数的分组依据一致. SQL Server中的开窗函 ...
- C++的优秀特性2:inline 函数
(转载请注明原创于潘多拉盒子) Inline函数是C++的一个很小的特性,在不计较效率的情况下,这个特性似乎可有可无.然而,C++天生是为最为广泛的应用场景设计的,因此,总会有关于效率的问题.其实,除 ...
- 【转】 嵌入式C语言编程中Inline函数的应用
源地址:https://blog.csdn.net/vigour1000/article/details/9622037 有一段儿时间没写写经验笔记了,哎,也是自己这一段时间以来(其实最近一直是这个状 ...
- Inline函数使用注意事项
Inline函数使用注意事项 1.在一个文件中定义的inline函数不能再另一个文件中使用 2.inline函数应简洁,只有少数几个语句. 3.在inline函数中不能有循环,if,switch语句. ...
- C++之inline函数
1.为什么需要inline C中的宏没有调用,参数压栈.返回操作所以比函数快,但是有参数副作用,inline为了取代这种表达式形式的宏定义,它消除了宏定义的缺点,同时又很好地继承了宏定义的优点. ...
最新文章
- 基于Tkinter利用python实现颜色空间转换程序
- 云时代服务器端工程师必备 CDN 技能包
- 自己实现spring核心功能 三
- 初识图机器学习(part5)--图表示学习2.0
- python string类型_Python的基本数据类型——String
- “小众”之美——Ruby在QA自动化中的应用
- spark mysql 交互_Spark - 直接操作数据源 MySQL
- 点货网 x mPaaS | 仅 2 位 Java 开发,使用小程序上线一款 App
- Java基础入门笔记-对象的销毁
- 福大软工1816 · 第一次团队作业
- 谋而后动:解读数仓计划生成中行数估算和路径生成的奥秘
- centos7改语言包
- NAS和私有云盘的区别?1篇文章说清楚
- 关于电商平台推出无门槛优惠券不得不说的几个问题
- mvn 默认scope_Maven依赖中的scope详解
- Android软键盘弹出和收起的监听
- S9013驱动直流电机原理图
- 【JMX】1. 什么是JMX、JDK中的JMX实现
- 十三、MySQL数据库
- 惠鑫云安全稳定为什么说澳元是高息钱银?高息钱银有哪些
热门文章
- Office 产品 Office Professional Plus 2010
- Excel行高、列宽怎么调整?
- 产品更新频繁线下培训成本高?华为云会议助力企业降本增效
- Mybatis之分页插件
- LeetCode:278(Python)—— 第一个错误的版本(简单)
- python计算均方根误差_scikit学习:如何计算均方根误差(RMSE)的百分比?
- Simulink —— Band-Limited White Noise模块的使用
- win10实现“我的电脑”显示到桌面
- java如何调用第三方接口
- 二叉树左右子树的交换并显示(C++实现)