"内联"函数定义的目的是什么?

use*_*043 4 c++

可能重复:
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;
}
Run Code Online (Sandbox Code Playgroud)

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

Cha*_*rns 11

inline关键字表明该功能被内联编译器.通常,当调用函数时,寄存器的当前内容被pushed(复制)到存储器.函数返回后,它们被popped(复制回).

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

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


K-b*_*llo 6

由于编译器足够聪明,可以决定哪些函数可以从内联中受益,哪些不会,inline只有真正的效果才能改变函数链接.默认情况下,inline函数具有外部链接.

inline 关键字仅仅是一个建议,编译器.编译器可以决定内联未声明的函数inline,或者不声明内联函数inline.