内联函数     

语法:在函数定义前添加inline关键字
注意:是在函数定义前添加,在声明前添加无效

1、内联函数的作用

先看下面这段代码

C++的内联函数

首先宏定义了一个函数,作用是 a 与 b 的值相乘,显而易见,输出结果为a = 10,b = 20,sum = 200。

现在我们将a 和 b的值改为a+b后 printf("%d\n",MUL(a+b,a+b)); 结果是什么呢?预想中应该为30*30 = 900,a = 30,b = 30,sum = 900,可是并不是这样

输出结果为

C++的内联函数

为什么会这样呢?将a+b 带入宏定义中为 a+b*a+b

只要你小学数学合格不难看出这个式子中b*a先运算,而后a加上其的乘积,最后加b。而我们的目的是让 a+b的和 与 a+b的和 相乘。所以在我们定义的宏函数中,编译器无法区分先运算的优先,需要我们自行加括号。
所以正确的宏函数定义为:#define MUL(a,b)  (a)*(b)

下面就用内联函数进a*b这个运算,代码如下

C++的内联函数

输出结果:

C++的内联函数1

1)内联函数在编译期间进行代码替换 编译完成后是没有函数体的,避免函数调用,节省了函数入栈出栈跳转等开销
2)内联是一种请求,有可能会被编译器拒绝
3)内联成功后,是没有函数体 即不能对函数进行取地址 内联函数不能作为回调函数使用

限制(函数时间开销不要太大)
1)不要有任何形式的循环语句
2)不要特别复杂的判断语    eg:if
3)函数体不要太大 最好不要超过五行

一般来说,推荐用 内联函数 替换 宏函数。

相关文章:

猜你喜欢
  • 2021-12-12
  • 2021-11-10
  • 2022-12-23
  • 2021-04-24
  • 2021-10-07
  • 2021-04-10
相关资源
相似解决方案