这段代码如何编译?

How will this code compile

本文关键字:编译 何编译 代码 段代码      更新时间:2023-10-16

假设代码如下:

inline void DoSome()
{
    cout << "do some" << endl;
}
int main()
{
    void (*pDoSome)() = DoSome;
    DoSome(); // one
    pDoSome(); // two
}
对于上面的代码,我们有三种可能的场景:
  1. 一个内联,两个不内联
  2. 1和2将内联
  3. 1和2不会内联(因为我们取了函数的地址)

现在我想知道上面哪个场景是正确的?

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

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