我对如何在C ++中使用内联函数感到困惑....
让我们说这个功能。如何将其转换为内联函数
int maximum( int x, int y, int z )
{
int max = x;
if ( y > max )
max = y;
if ( z > max )
max = z;
return max;
}
答案 0 :(得分:8)
要将其转换为内联函数,您需要做两件事:
inline
答案 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.