4

可能重复:
C++ 中内联函数的好处?

和有什么区别

#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
        int x;
        cout << "n Enter the Input Value: ";
        cin>>x;
        cout << "n The Output is: " << exforsys(x);
}

int exforsys(int x1)
{
        return 5*x1;
}

#include <iostream>
using namespace std;
int exforsys(int);
void main( )
{
        int x;
        cout << "n Enter the Input Value: ";
        cin>>x;
        cout << "n The Output is: " << exforsys(x);
}

inline int exforsys(int x1)
{
        return 5*x1;
}

这两个定义对于我猜的代码来说是一样的,那么使用内联函数定义有什么好处呢?

4

6 回答 6

11

inline关键字向编译器建议内联函数。通常,当调用函数时,寄存器的当前内容会pushed(复制)到内存中。一旦函数返回,它们就会被popped(复制回来)。

这需要一点时间,尽管通常如此之少以至于无论函数做什么都会使函数调用开销相形见绌。有时,当一个非常小的函数在紧密循环中每秒调用数千次时,所有这些函数调用的组合函数调用开销会加起来。在这些情况下,程序员可以向编译器建议,而不是在该循环中调用函数,而是将函数的内容直接放入循环中。这避免了开销。

一些编译器,尤其是 Microsoft Visual C++,会忽略该inline关键字。微软相信他们的优化器足够聪明,知道什么时候应该内联一个函数。对于那些你真的想要内联函数的情况,微软和其他供应商有时会提供一个专有的,“不,我是认真的!” 关键词。在 Visual C++ 的情况下,__forceinline如果我没记错的话。然而,如果优化器非常强烈地认为内联该函数是一个坏主意,即使这一点仍然可以忽略。

于 2012-12-26T05:41:42.717 回答
6

由于编译器足够聪明,可以决定哪些函数会从内联中受益,哪些不会,因此inline唯一真正的效果是更改函数链接。默认情况下,inline函数具有外部链接

inline 关键字只是对编译器的建议。编译器可以决定内联未声明的函数inline,或者不内联声明的函数inline

于 2012-12-26T05:40:43.877 回答
0

好吧,内联函数的代码在编译时被放置在它的使用处。因此,它的执行速度有点快,源代码长度仍然很小。

于 2012-12-26T05:34:56.123 回答
0

当您调用内联函数时,预处理器不会将执行控制权转移到该函数,而是将所有此类函数调用替换为实际的函数代码。在 C++ 中,当您在类中定义函数时,默认情况下它是内联的,前提是它没有循环语句。

于 2012-12-26T05:36:26.517 回答
0

来自C++ 语言规范7.1.2

带有 inline 说明符的函数声明声明了一个内联函数。inline 说明符向实现表明,在调用点对函数体进行内联替换优于通常的函数调用机制。

这意味着实现可以用方法体代替方法调用,从而避免了正常方法调用过程中通常发生的开销。但内联替换不是强制性的,它是特定于实现的。

在调用点执行此内联替换不需要实现;然而,即使省略了这个内联替换,7.1.2 中定义的内联函数的其他规则仍应遵守

于 2012-12-26T05:46:57.107 回答
0

内联函数调用实际上被内联函数本身所取代。

这优雅而简单地解释了它。 http://www.cprogramming.com/tutorial/lesson13.html

维基百科文章也很有帮助。 http://en.wikipedia.org/wiki/Inline_function

于 2012-12-26T05:38:01.720 回答