c ++内联函数

时间:2010-04-29 16:33:25

标签: c++ inline-functions prototype

我对如何在C ++中使用内联函数感到困惑....

让我们说这个功能。如何将其转换为内联函数

int maximum( int x, int y, int z )
{
   int max = x;
   if ( y > max )
      max = y;
   if ( z > max )
      max = z;
   return max;
}   

6 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:4)

将Neils的回答作为实际答案发布:

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

答案 2 :(得分:4)

正如其他人所说,您可以使用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;
}   

答案 3 :(得分:3)

如果该函数定义出现在class {}定义中,则它已自动内联。

否则,正如其他人所说,将inline放在前面。

答案 4 :(得分:2)

要使函数内联使用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++ FAQ Lite和此GotW

中详细了解内联函数以及如何(以及何时)使用它们

答案 5 :(得分:1)

inline只是告诉编译器你希望函数代码复制到它所引用的任何地方,它使代码更快(没有函数调用开销)但更大(代码被复制)。 This page is more in depth.