如果编译器内联通过函数指针调用的函数会发生什么

Met*_*est 15 c c++ compiler-construction

让我们说我的程序中有一个函数,在我的代码中的某个地方,该函数是通过函数指针调用的.如果编译器碰巧内联该函数会发生什么,或者编译器是否意识到有一个函数指针分配给该函数,从而避免内联它.

Rei*_*ica 12

当获取指向函数的指针时,编译器将为该函数生成一个外联体.仍然可以在其他呼叫站点内联功能.

请注意,标记的函数inline必须在引用它的所有TU中都有一个定义,并且这些定义必须相同.这意味着在某些呼叫站点内联功能并将其保持在其他呼叫站点之外是完全安全的.

  • @NicholasWilson,这将是一个不正当的计划. (6认同)
  • @NicholasWilson在这种情况下,[basic.def.odr]§5陈述"那么行为是未定义的." (3认同)
  • @NicholasWilson违反了单定义规则,并且明确地将其称为没有定义的行为. (2认同)