C++ inline和define(宏)

Inline 函数是什么意思?

inline是内联的意思,可以定义比较小的函数。因为函数频繁调用会占用很多的栈空间,进行入栈出栈操作也耗费计算资源,所以可以用inline关键字修饰频繁调用的小函数。编译器会在编译阶段将代码体嵌入内联函数的调用语句块中。

C++中哪些函数不能声明为inline?

  1. 包含了递归、循环等结构的函数一般不会被内联。
  2. 虚拟函数一般不会内联,但是如果编译器能在编译时确定具体的调用函数,那么仍然会就地展开该函数。
  3. 如果通过函数指针调用内联函数,那么该函数将不会内联而是通过call 进行调用。
  4. 构造和析构函数一般会生成大量代码,因此一般也不适合内联。
  5. 如果内联函数调用了其他函数也不会被内联
  6. inline在类体中和类外定义成员函数是有区别的,在类体定义的成员函数为inline函数,在类外定义的不是。
  7. 用static修饰的inline函数,本限定在本源码文件中,不能被本源码文件以外的代码文件调用,隐藏的作用,所以内联函数是可以被static修饰,但是inline函数内调用static函数会不展开

内联(inline)函数和 #define(宏)

  1. 在编译的时候,内联函数直接被嵌入到目标代码中去,而宏只是一个简单的文本替换。
  2. 内联函数在运行时可调式,宏定义不可以
  3. 内联函数可以访问类的成员变量,宏不可以
  4. 类中的成员函数是默认的内联函数
  5. 内联函数在编译时展开,而宏在预编译时展开
  6. 宏定义在形式上类似于一个函数,但在使用它时,仅仅只是做预处理器符号表中的简单替换,因此它不能进行参数有效性的检测,也就不能享受C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换为可转换的合适的类型,这样,它的使用就存在着一系列的隐患和局限性。
  7. 宏是 由预处理器对宏进行替换 的,而内联函数是 通过编译器控制实现 的,更加安全,而不是单纯的替换
  8. 编译时,在调用处用内联函数体的代码来替换,这样没有函数压栈,将会节省调用的开销,提高运行效率(以空间换时间)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值