【问题标题】:inline functions in c++C++中的内联函数
【发布时间】:2011-03-07 11:33:53
【问题描述】:

这是一个关于 c++ 内联函数的小问题。

在 C++ 编译的哪个阶段,内联函数实际上是在调用时内联的?

这基本上是如何工作的。

让我们说如果编译器决定在程序员在函数前面使用 inline 关键字请求后必须内联特定函数,编译器什么时候为程序员这样做。我的意思是在什么阶段编译。

是不是像c宏一样在预处理阶段展开?

【问题讨论】:

  • 上面提到的副本是基于内联函数概念的讨论。但我的问题不是关于概念,而是关于编译过程。
  • @Georg Fritzsche:我编辑了我的评论;)
  • 维基百科上有一篇很好的文章。 en.wikipedia.org/wiki/Inline_expansion 但请记住,C++ 是一种语言,而不是一种实现,所以这一切如何发生完全由实现定义。

标签: c++ inline-method


【解决方案1】:

它会因编译器而异。并且某些编译器中的某些阶段在其他编译器中将没有相应的阶段。所以你的问题并没有确切的答案。

但通常它是在创建函数的解析树之后,但在实际生成代码或完成许多优化之前完成的。这是执行此操作的最佳位置,因为您希望优化器可以使用最大数量的信息。

像预处理器宏扩展一样进行操作通常为时过早。编译器没有足够的信息来进行适当的类型检查,而且更容易犯错误,导致副作用发生不止一次等等。

GMan 在评论中提供了一个出色的 Wikipedia 链接,该链接比我在这里更详细地介绍了 function inlining process。我的回答大体上是对的,但有很多变化,甚至比我想象的还要多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2019-03-24
    • 2017-01-05
    • 2011-08-23
    • 1970-01-01
    相关资源
    最近更新 更多