2

假设我们有以下代码:

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

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

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

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

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

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

4

2 回答 2

6

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

于 2014-08-25T15:14:57.950 回答
6

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

于 2014-08-25T15:15:14.167 回答