【C++】inline函数与普通函数、宏、static修饰的函数的区别
inline函数(内联函数)
把代码在函数的调用点直接展开。
定义:将规模小,而使用频繁的函数声明为内联函数。(在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程传出去)
注意事项:
①写在头文件下;
②只在release版本生效;
③建议:循环、递归、switch一定不会出现inline;
④加在声明点一定无效,因为inline是基于实现的,不是基于声明的。
#include <iostream>
int Sum(int, int);//[email protected]@[email protected] *UND*
inline int Sum(int a, int b) //[email protected]@[email protected] .text
{
return a + b;
}
inline void Print(int arr[], int len)
{
if (len <= 0)
return;
Print(arr, len - 1);
cout << arr[len - 1] << " ";
}
int main()
{
Sum(10, 20); // 10 + 20;
int arr[] = { 231, 3, 12, 3, 12, 1 };
int len = sizeof(arr) / sizeof(arr[0]);
Print(arr, len);
return 0;
}
1、inline与普通函数的区别
① 普通函数调用需要开辟栈帧和回收栈帧(清栈),内联函数不开辟和回收栈帧,在调用出展开代码
②普通函数会在编译完生成函数名对应的符号,链接的时候在符号表上可以找到,内联函数不生成符号
③内联函数可以放在头文件中,方便调用,但是普通函数放在头文件中,多个文件编译用到一个头文件,可能会产生函数的重定义
2、inline与static修饰的函数的区别
①二者都只在当前文件可见;
②static修饰变量或者函数,inline只修饰函数
static修饰的函数的作用:
调用这个函数不会访问或者修改任何对象数据成员
static函数与普通函数的区别:
用static修饰的函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用。而普通的函数,默认是extern的,可以被其它代码文件调用该函数。
在函数的返回类型前加上关键字static,函数就被定义成为静态函数。普通 函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
因此定义静态函数有以下优点:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突。
<2> 静态函数不能被其他文件所用。
3、inline与宏的区别
1.宏在预编译阶段进行字符替换,没有安全检查,内联函数在编译阶段展开,编译阶段有安全检查,内联函数相对宏更安全
2.宏无法调试,内联函数可以调试
3.内联是一种更安全的宏
上一篇: 构造函数不可以是虚函数;析构函数可以是虚函数,也可以是纯虚函数。
下一篇: 内联函数代替带参数的宏