我对如何在 C++ 中执行内联函数感到困惑......
让我们说这个功能。如何将其转换为内联函数
int maximum( int x, int y, int z )
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
我对如何在 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 int maximum(int x, int y, int z)
....
正如其他人所说,您可以使用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;
}
如果该函数定义出现在class {}
定义中,则它已经自动内联。
否则,正如其他人所说,放在inline
前面。
要使函数内联,请使用 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阅读更多关于内联函数以及如何(以及何时)使用它们的信息
inline
只是告诉编译器您希望将函数代码复制到它所引用的任何地方,它使代码更快(没有函数调用开销)但更大(代码被复制)。 这个页面更深入。