我对如何在C ++中执行内联函数感到困惑。

可以说这个功能。它将如何转到内联函数

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   
有帮助吗?

解决方案

正如其他人所说的,您可以使用 inline 关键字告诉编译器您想要函数上的函数。但是 inline 关键字只是编译器 暗示. 。编译器可以并且将选择如果需要或需要,可以忽略您的请求。

一种替代方法是使您的功能成为函数模板,通常将其吹入内联:

template<class Val>
Val maximum( Val x, Val y, Val z )
{
   Val max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   

其他提示

为了将其转变为内联函数,您需要做两件事:

  1. 通过使用关键字来声明它的内联 inline.
  2. 确保 定义 在使用它的每个翻译单元中都可以看到此功能。这通常意味着您必须将函数的整个定义放入标头文件中。

将尼尔作为实际答案发布:

inline int maximum(int x, int y, int z)
....

如果该功能定义出现在 class {} 定义,然后已经自动内联。

否则,正如其他人所说的那样, inline 在前。

为了使函数内联用户使用内联关键字:

inline int maximum( int x, int y, int z ) // note the inline keyword
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}

如果该函数是类/结构的成员,则简单地将其定义在类中(与外部相同)使其内联。

说你有电话:

int f = maximum(3, 4, 5)

编译器可能会将呼叫扩展到类似的内容:

int max = x;
if ( y > max )
   max = y;
if ( z > max )
   max = z;
int z = max;

调用功能有一些开销,因此内联函数为您提供了功能的便利性以及C型宏的性能。但这并不是说您应该始终使用它们,在大多数情况下,编译器更好地决定何时需要这样的优化,甚至可能不符合您的要求。

您可以阅读更多有关内联函数以及如何(何时)在 C ++常见问题解答 还有这个 哥特

inline 只需告诉编译器,您希望在引用的任何地方复制函数代码,它使代码更快一点(无函数调用开销),但更大(代码已复制)。 此页面更深入。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top