假设代码如下:
inline void DoSome()
{
cout << "do some" << endl;
}
int main()
{
void (*pDoSome)() = DoSome;
DoSome(); // one
pDoSome(); // two
}
对于上面的代码,我们有三种可能的场景:
- 一个内联,两个不内联
- 1和2将内联
- 1和2不会内联(因为我们取了函数的地址)
现在我想知道上面哪个场景是正确的?
inline
是对编译器的提示,但不是义务。由编译器决定是否将声明为inline
的函数实际内联,因此两个调用中的任何一个都可能内联,也可能不内联。
所有情况都是可能的,因为编译器可以根据需要进行优化。要查看发生了什么,唯一的选择是查看汇编程序输出。