题
我对如何在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;
}
其他提示
为了将其转变为内联函数,您需要做两件事:
- 通过使用关键字来声明它的内联
inline
. - 确保 定义 在使用它的每个翻译单元中都可以看到此功能。这通常意味着您必须将函数的整个定义放入标头文件中。
将尼尔作为实际答案发布:
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
只需告诉编译器,您希望在引用的任何地方复制函数代码,它使代码更快一点(无函数调用开销),但更大(代码已复制)。 此页面更深入。
不隶属于 StackOverflow