如何在调用位置替换内联函数代码?

Ume*_* MS 2 c++

我想知道如何用内联代码替换内联函数调用.我读了一些书,说编译器可能会将内联函数视为正常函数.

可以自己解释内联函数的工作原理.

Cra*_*rks 11

从C++ FAQ:

当编译器内联扩展函数调用时,函数的代码将被插入到调用者的代码流中(概念上类似于#define宏所发生的情况).这取决于其他很多东西,可以提高性能,因为优化器可以在程序上集成被调用的代码 - 将被调用的代码优化到调用者中.

有几种方法可以指定函数是内联的,其中一些涉及内联关键字,另一些则不涉及.无论您如何将函数指定为内联,都是允许编译器忽略的请求:它可能内联扩展内联函数的部分,全部或全部调用.(如果这看起来毫无希望地模糊,不要气馁.上述的灵活性实际上是一个巨大的优势:它让编译器对待大型函数与小函数不同,而且它让编译器生成易于调试的代码,如果你选择的话正确的编译器选项.)

在最简单的情况下,内联函数将被放入其调用站点,就像您在那里复制并粘贴它一样.因此,

inline int madd( int a, int b, int c ) 
{
   return a * b + c;
}


void foo( int data[3] )
{
   int result = madd( data[0], data[1], data[2] );
   printf("%d\n", result); // note to pedants: this is simpler than a cout stream, so there
}
Run Code Online (Sandbox Code Playgroud)

编译器可以把它变成

void foo( int data[3] )
{
   int result = data[0] * data[1] + data[2] ; // madd is replaced inline
   printf("%d\n", result); 
}
Run Code Online (Sandbox Code Playgroud)