这段代码将如何编译

时间:2014-08-25 15:11:54

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

假设我们有以下代码:

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

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

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

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

  1. 一个将被内联,两个获胜
  2. 将内联一个和两个
  3. 一个和两个不会被内联(因为我们采用了函数的地址)
  4. 现在我想知道上述哪些情况属实?

2 个答案:

答案 0 :(得分:6)

所有方案都是可能的,因为编译器可以根据需要进行优化。查看发生的事情的唯一选择是查看汇编程序输出。

答案 1 :(得分:6)

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