C++ inline函数
1 int big(int a, int b) { 2 return a > b ? a : b; 3 }
上面是求两个数中较大者的函数,当然我们可以在任意使用big(a, b)的位置用如下这句话代替:(a > b ? a : b).
把这种小操作定义为函数的优缺点如下:
优点:
1. 阅读和理解函数的调用比读懂等价的表达式容易。
2. 使用函数可以确保行为的统一,每次相关操作都能保证按照同样的方式进行。
3. 修改函数比修改所有位置的等价表达式更容易。
4. 函数可以被其他应用重复利用,省去了编码的代价。
缺点:
1. 调用函数比求等价的表达式慢。
函数调用包含一系列工作:调用前要先保存寄存器,并在返回时恢复;可能需要拷贝实参;程序转向一个新的位置继续执行。
内联函数可避免函数调用的开销
将函数指定为内联,通常就是将它在每个调用“内联地”展开。假设吧big函数定
义为inline,则如下调用
cout << big(a, b) << endl;
在编译过程中展开成类似于下面的形式
cout << (a > b ? a : b) << endl;
1、内联函数对于编译器来说只是一个建议,编译器可以选择忽略这个建议。
2、内联函数应该在头文件中定义,这一点不同于其他函数。
3、在头文件中加入或者修改内联函数时,使用了该头文件的所有源文件都必须重新编译。
4、内联函数的定义对编译器而言必须是可见的,以便编译器能够在调用点内联展开该函数的代码。
5、为了使得inline声明内联函数有效,我们必须将inline关键字与函数体放在一起才行,否则inline关键字是不能成功将函数声明内联函数的。
更多:https://zh.wikipedia.org/wiki/%E5%86%85%E8%81%94%E5%87%BD%E6%95%B0