当前位置: 首页 > news >正文

C++ inline和define(宏)

文章目录

  • Inline 函数是什么意思?
  • C++中哪些函数不能声明为inline?
  • 内联(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. 编译时,在调用处用内联函数体的代码来替换,这样没有函数压栈,将会节省调用的开销,提高运行效率(以空间换时间)

相关文章:

  • DeepSeek的神经元革命:穿透搜索引擎算法的下一代内容基建
  • Redis 学习目标
  • O(n)复杂度实现寻找数组第k小的数(快速选择算法)
  • spring--整合Mybatis详解
  • 支持多格式且免费的图片转换工具推荐
  • 【Java实战】——手撕斐波那契数列
  • 成都国际数字影像产业园:以产业生态优势,驱动影像业务腾飞
  • PM2 完全指南:Node.js 应用后台启动、关闭与重启详解
  • ONVIF/RTSP/RTMP协议EasyCVR视频汇聚平台RTMP协议配置全攻略 | 直播推流实战教程
  • 蓝桥杯赛前题
  • VectorBT量化入门系列:第五章 VectorBT性能评估与分析
  • zerotier安装在旁路由实现异地局域网互访的设置方法
  • P8754 [蓝桥杯 2021 省 AB2] 完全平方数
  • 蓝桥杯比赛 python程序设计——封闭图形个数
  • 使用Lombok的@Slf4j和idea构建:找不到log符号-解决
  • ARP代理
  • 微硕WINSOK高性能MOS管WSD30L40DN33在PD快充中的应用
  • JVM 之 String 引用机制解析:常量池、堆内存与 intern 方法
  • Windows 下搭建 Git 本地服务器并进行开发
  • Dify问题记录 (一)