【C++】inline函数与普通函数、宏、static修饰的函数的区别

inline函数(内联函数)

把代码在函数的调用点直接展开。

定义:将规模小,而使用频繁的函数声明为内联函数。(在编译时将所调用函数的代码直接嵌入到主调函数中,而不是将流程传出去

注意事项:

①写在头文件下;

②只在release版本生效;

③建议:循环、递归、switch一定不会出现inline;

④加在声明点一定无效,因为inline是基于实现的,不是基于声明的。

#include <iostream>
int Sum(int, int);//?Sum@@YAHHH@Z    *UND*
inline int Sum(int a, int b)  //?Sum@@YAHHH@Z .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.内联是一种更安全的宏

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值