05.内联函数

05.内联函数

内联函数的作用

  • 函数的作用是对会重复多次使用的代码段进行封装,而内联函数的作用是将函数体较为简单的代码片段通过内联的方式直接放在函数调用的位置,使用内联函数的目的是为了减少调用较为简单的函数时,因为进出函数而造成较大的开销
  • 因为函数体和功能较为简单的函数,实际调用函数过程中进出函数的开销远大于实际使用函数体功能,因此通过内联的方式减少开销

内联函数和使用宏定义实现代码替换的对比

  • 内联函数的作用实际上与宏定义的替换非常类似,但是宏定义的替换因为直接是文本替换可能会造成一些错误
#define GETMAX(a,b)   ((a) > (b) ? (a) : (b))

 inline int getMax(int a, int b)
{
    
    
	return a > b ? a : b;
}

int main(int argc, char** argv)
{
    
    
	int n = argc + 10;
	//int res1 = GETMAX(n++,2);//res1结果为12,n为13,使用宏定义与预期结果不同
	int res2 = getMax(n++,2); //res2结果为11,n为12,使用内联函数与预期结果相同
}
//使用宏定义的代码执行过程
int res1 = ((n++) > (2) ? (n++) : (2))
1.n = 11先与2比较,112.执行n++, n = 12
3. 11 > 2,所以返回(n++),此时n = 12,所以res为12
4. 执行n++,n = 13

使用内联函数的注意事项

  • 内联函数只是对编译器的建议,具体是否采用内联函数仍然取决于编译对内联函数中函数体复杂程度的判断
  • 在代码调试时,使用debug版本时没有内联函数,系统仍然会进入函数体内部,方便调试
  • 内联函数在使用时一般写在函数声明的头文件中,这样调用内联函数时,只需要引入对应的头文件即可

但是需要注意的是如果一个普通函数(非内联函数)写在头文件中,并且在多个cpp文件中引用了该头文件会报重定义的错误

猜你喜欢

转载自blog.csdn.net/m0_45388819/article/details/113814502