【问题标题】:How will this code compile这段代码将如何编译
【发布时间】:2014-08-25 15:11:54
【问题描述】:

假设我们有以下代码:

inline void DoSome()
{
    cout << "do some" << endl;
}

int main()
{
    void (*pDoSome)() = DoSome;

    DoSome(); // one
    pDoSome(); // two
}

对于上面的代码,我们有三种可能的场景:

  1. 一个将被内联,两个不会
  2. 一个和两个将被内联
  3. 一和二不会被内联(因为我们取了函数的地址)

现在我想知道以上哪种情况是真的?

【问题讨论】:

  • 它们都可能是真的,这取决于编译器选择做什么。

标签: c++ function-pointers inline-functions


【解决方案1】:

inline 是对编译器的提示,但不是义务。由编译器决定是否声明为inline 的函数实际上会被内联,因此这两个调用中的任何一个都可能被内联,也可能不被内联。

【讨论】:

    【解决方案2】:

    所有场景都是可能的,因为编译器可以根据需要进行优化。要查看发生了什么,唯一的选择是查看汇编器输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多