【C++】内联函数 ③ ( C++ 编译器 不一定允许内联函数的内联请求 | 内联函数的优缺点 | 内联函数 与 宏代码片段对比 )
  K1I6GvxBEuyy 2023年11月02日 49 0



文章目录

  • 一、内联函数不一定成功
  • 1、内联函数的优缺点
  • 2、C++ 编译器 不一定允许内联函数的内联请求
  • 3、是否内联决定权在编译器手中
  • 二、内联函数 与 宏代码片段对比
  • 1、内联函数
  • 2、宏代码片段







一、内联函数不一定成功




1、内联函数的优缺点



" 内联函数 " 不是在运行时调用的 ,

" 内联函数 " 是 编译时 将 函数体 对应的 CPU 指令 直接嵌入到调用该函数的地方 ,

从而 降低了 函数调用的开销 , 提高了程序的执行效率 ;



内联函数 的 缺点 也很明显 , 就是会增加代码的大小 , 调用了多少次内联函数 , 就要拷贝多少次内联函数的代码指令到调用的地方 ;

要谨慎使用 " 内联函数 " , 避免不必要的 开销 和 代码膨胀 ;



2、C++ 编译器 不一定允许内联函数的内联请求



由于 " 内联函数 " 会导致不必要的 开销 和 代码膨胀 , 因此 , C++ 编译器并不一定保证内联请求的成功 ;

使用 inline 关键字 可以请求 C++ 编译器将函数进行内联 , 但是编译器并不一定会接受这个请求 ;



权衡利弊 : " 内联函数 "是否 成功内联 取决于 C++ 编译器 的 实现 和 优化策略 ;

  • 内联函数 优点 是 可以减少函数调用的开销,提高程序的执行效率 ;
  • 内联函数 缺点 是 会增加代码的大小 , 会降低程序的性能 ;

因此,编译器在决定 " 内联函数 " 是否 内联时 , 会进行权衡 内联带来的性能提升 和 代码大小增加的开销 ;



3、是否内联决定权在编译器手中



是否内联决定权在编译器手中 : 在 C++ 语言中,inline关键字只是对编译器的建议,编译器可以根据自己的 优化策略 自由决定是否内联函数 ;

在 普通函数 声明和定义 位置 前面加上 inline 关键字 ,

  • 只是 建议 C++ 编译器将该函数内联 , 并不强制要求编译器内联函数 ,
  • 如果编译器决定不内联函数 , 该 内联函数 作用 等同于 普通函数 ;

最终 内联函数 是否内联成功 , 由 编译器 决定 ;






二、内联函数 与 宏代码片段对比




1、内联函数



" 内联函数 " 的 本质是 函数 , 其是一种 特殊的函数 ;



" 内联函数 " 有 普通函数 的特征 , 即 :

  • 定义时 有 函数名 , 参数列表 , 返回值类型 , 函数体 ;
  • 执行时 有 参数检查 , 返回值类型检查 ;


内联函数 的 inline 关键字 只是请求 C++ 编译器 将 该函数进行内联 , 具体 C++ 是否同意 , 需要根据 C++ 编译器的优化策略决定 , 可能同意 , 也可能不同意 ;

如果 C++ 编译器 不同意 内联请求 , 则该 内联函数 就是 普通函数 , 当做 普通函数 进行调用处理 ;



2、宏代码片段



" 宏代码片段 " 本质 是 宏定义 ;

宏代码片段 是由 预处理器 进行处理 , 执行的操作是 简单的文本替换 ;

宏代码片段 不是函数 , 没有函数那么强大的功能 ,没有编译的过程 ;


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
K1I6GvxBEuyy
作者其他文章 更多