200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > inline函数返回值_C++ 内联函数 inline的详细分析

inline函数返回值_C++ 内联函数 inline的详细分析

时间:2019-07-06 08:00:17

相关推荐

inline函数返回值_C++ 内联函数 inline的详细分析

1. 什么是内联函数?

就是使用了关键字inline的函数,如

inlineintmax(inta,intb){

2. 内联函数有什么作用?

C++在调用函数时,会执行一系列的操作:

将参数push到堆栈中

将返回地址push到堆栈中

准备返回值

将所有push到堆栈的东西都pop出来

这一系列的操作无疑增加了延迟,inline函数就是把函数内容嵌入到函数调用的地方,但仍然保持函数的独立性(即函数有自己的空间)。

intmain(){

在使用inline之后,上面的代码在执行过程中,跟下面的代码是一样的:

intmain(){

3. 如何使用内联函数?

内联函数跟普通函数的使用方式有所不同,内联函数的声明和定义不能分开在不同的文件,即都要在同一个文件中,因此我们在使用时,直接在头文件中定义出inline函数即可。

inlineintmax(inta,intb){

看到这里,很多同学就会觉得inline跟宏定义的用法很像,比如下面这个例子:

Example1:

#definef(x)x*x

Example2:

inlineintf(intx){

这两段代码都会产生warning,但第一个代码输出结果是错的,第二个输出结果的对的。这是为什么呢?因为宏定义不会做类型检查,f(x)的结果是一个double型的,而我们用%d来打印,结果肯定是不对的;而第二个代码中,x是double型,但函数f的参数类型是int型,因此会先进行类型转换后,再进行x*x的操作。

4. 注意事项

如果我们的内联函数过于巨大,那编译器不会将其编译成内联函数;

内联函数中有太多循环,编译器也不会将其编译成内联函数;

递归函数不能是内联函数;

如果class的成员函数,在声明时就给出了函数的body,即函数定义,那这些函数都是inline的;如果在成员函数声明时,并没有直接给出body,而是在下面定义成员函数时使用`inline关键字,这样即可以保持class的定义比较干净,还可以使函数类型为inline

5. 是否需要inline

什么时候需要inline?

当函数比较小的时候,比如只有几行代码,建议使用inline

当被循环调用时,建议使用inline

什么时候不需要inline?

当函数超过20行后,就不要再做inline 了

递归函数不能用inline

往期文章:

C++ vector用法详解

SystemVerilog教程之数据类型1

Vivado中模块封装成edif和dcp

自动驾驶入门之视觉定位坐标转换

什么是噪声温度?-174dBm/Hz又是什么?

FPGA 中的有符号数乘法

为什么推荐使用XPM?

RAM IP Core中 Write First Read First和No Change的区别

Vivado调试小结:ILA debug中的数据也许并不可信

FPGA复位的正确打开方式

如何使用Git进行Vivado工程的管理

大家一致避免使用的锁存器为什么依然存在于FPGA中?我们对锁存器有什么误解?

影响FPGA时序的进位链(Carry Chain), 你用对了么??

Virtex7 Microblaze下DDR3测试

Matlab高效编程技巧

生成Verilog HDL例化模板

DCM/DLL/PLL/MMCM区别

FPGA时序约束教程:

FPGA时序约束理论篇之建立保持时间

FPGA时序约束理论篇之时序路径与时序模型

3.FPGA时序约束理论篇之IO约束

4.FPGA时序约束理论篇之时钟周期约束

5.FPGA时序约束理论篇之两种时序例外

6.FPGA时序约束理论篇之xdc约束优先级

7.FPGA时序约束实战篇之梳理时钟树

8.FPGA时序约束实战篇之主时钟约束

9.FPGA时序约束实战篇之衍生时钟约束

10.FPGA时序约束实战篇之延迟约束

11.FPGA时序约束实战篇之伪路径约束

12.FPGA时序约束实战篇之多周期路径约束

13.Vivado时序约束辅助工具

14.FPGA时序约束之Tcl命令的对象及属性

欢迎关注微信公众号:

加FPGA技术交流群的朋友,请加微信:xhclsys2

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。