首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于内联函数,该怎么处理

2012-03-06 
关于内联函数书上都说内联函数是把被调用函数体代码直接插入到该函数被调用处,而不是通过call语句进行,没

关于内联函数
书上都说内联函数是把被调用函数体代码直接插入到该函数被调用处,而不是通过call语句进行,没有了参数压栈,出栈等函数调用开销,
下面这个程序,我在vc6.0下看了下汇编,怎么还是call语句调用内联函数,参数压栈,寄存器压栈,然后返回,各位大侠给指点下!
#include   <iostream>
#include   <string>
using   namespace   std;

class   Point
{
    int   i,   j,   k;
public:
Point():   i(0),   j(0),   k(0)   {}
    Point(int   ii,   int   jj,   int   kk)
        :   i(ii),   j(jj),   k(kk)   {}
    void   print(const   string&   msg   =   " ")   const
    {
        if(msg.size()   !=   0)   cout   < <   msg   < <   endl;
        cout   < <   "i   =   "   < <   i   < <   ",   "
                  < <   "j   =   "   < <   j   < <   ",   "
                  < <   "k   =   "   < <   k   < <   endl;
    }
    void   test(int   ii)   {i=ii;}

};

int   main()
{
    Point   p,   q(1,2,3);
————————这句的汇编代码————————————————
004015D3   8D   4D   E8                           lea                   ecx,[ebp-18h]
004015D6   E8   83   FB   FF   FF               call                 @ILT+345(Point::Point)   (0040115e)
004015DB   6A   03                                 push                 3
004015DD   6A   02                                 push                 2
004015DF   6A   01                                 push                 1
004015E1   8D   4D   DC                           lea                   ecx,[ebp-24h]
004015E4   E8   AD   FA   FF   FF               call                 @ILT+145(Point::Point)   (00401096)
——————————————————————————————————
    p.print( "value   of   p ");
    q.print( "value   of   q ");
    cout   < <   sizeof   Point   < <endl;
    q.test(2);
__________________________________________________
0040164F   6A   02                                 push                 2
00401651   8D   4D   DC                           lea                   ecx,[ebp-24h]


00401654   E8   18   FC   FF   FF               call                 @ILT+620(Point::test)   (00401271)
_________________________________________________
    return   0;
}   ///:~

[解决办法]
哪本书上说inline一定内联了?inline关键字只是“建议”编译器把这个函数内联。
另外,你看的汇编是不是debug版啊?debug版本来就不太会真正内联的,因为那将给程序的debug带来一些麻烦。
[解决办法]
C++里面的内联函数主要是为了提升程序的效率~
inline关键字只是“建议”编译器把这个函数内联~
对于过大的函数进行内联不一定能提高程序的效率反而增加其负担~
[解决办法]
恩, 是建议内联的, 而且跟编译器的设置有关

热点排行