C++内联函数详情

这篇文章主要介绍了C++内联函数,文章主要围绕C++内联函数的相关资料展开详细内容,需要的朋友可以参考一下,希望对大家有所帮助


include<cmath>

double distance(double x, double y) {
    return sqrt(x * x + y * y);
}

double x = 3.0, y = 4.0;
double d = distance(x, y);

当我们使用了内联函数之后,它相当于把函数的代码拷贝了一份粘贴到了调用的位置:


double x = 3.0, y = 4.0;
double d = sqrt(x * x + y * y);

这也就是内联的含义,使用了内联函数之后,程序无须跳转到另外一个位置进行执行,可以节省掉跳转所带来的开销。因此运行效率要比普通函数更快,但代价是需要占用更多的内存。比如我们调用了10次内联函数,相当于代码拷贝了十份。

内联函数的使用非常简单,就是在函数定义之前加上inline关键字。

需要注意的是,有的时候我们虽然加上了inline关键字但编译器并不一定会遵照执行。有些编译器会有函数规模的限制,并且会限制内联函数禁止调用自己,也就是不能递归。

还有一点是内联函数虽然有内联机制,但是函数的传参依然是值传递,也就是说会发生拷贝,和普通函数一致。

在C语言当中没有inline特性,C语言是使用宏定义来实现类似的功能。但宏定义并不是通过参数传递,而是代替机械替换实现的。

比如:


#define SQUARE(x) x*x

double a = SQUARE(3.4 + 3.5);

这样我们得到的结果会是3.4 + 3.5 * 3.4 + 3.5,也就是说宏定义只是机械地替换代码,并不是函数式的调用。所以要实现类似inline函数的效果,可以使用括号:


#define SQUARE(x) ((x) * (x))

到此这篇关于C++内联函数详情的文章就介绍到这了,更多相关C++内联函数内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!

出品 | 公众号:Coder梁(ID:Coder_LT)

本文标题为:C++内联函数详情