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

还有个有关问题,内联函数的定义必须出现在第一次被调用之前,这句话是否正确

2013-08-04 
还有个问题,内联函数的定义必须出现在第一次被调用之前,这句话是否正确?内联函数的定义必须出现在第一次被

还有个问题,内联函数的定义必须出现在第一次被调用之前,这句话是否正确?
内联函数的定义必须出现在第一次被调用之前,那么如果内联函数的定义出现在第一次被调用之后,是不是说这个内联函数就不是内联函数了呢?比如说:


void p(); 
p();
inline void p(){cout<<"hello";} 

这个p是不是内联函数?

[解决办法]
晕,这不是 call        std::operator<<<std::char_traits<char> > 
这是,内联了呀
print() 如果不内联,应该出现
call  ?print@@YAXXZ
call _print 
call _print@0 之类的代码


PUBLIC?print@@YAXXZ; print
PUBLIC_main
;COMDAT _main
_TEXTSEGMENT
_mainPROC NEAR; COMDAT

; 14   : {

pushebp
movebp, esp
subesp, 64; 00000040H
pushebx
pushesi
pushedi
leaedi, DWORD PTR [ebp-64]
movecx, 16; 00000010H
moveax, -858993460; ccccccccH
rep stosd

; 15   : print();

call?print@@YAXXZ; print

; 16   : return 0;

xoreax, eax

; 17   : }

popedi
popesi
popebx
addesp, 64; 00000040H
cmpebp, esp
call__chkesp
movesp, ebp
popebp
ret0
_mainENDP
_TEXTENDS


;COMDAT _main
_TEXTSEGMENT
_mainPROC NEAR; COMDAT

; 14   : {

pushesi
pushedi

; 15   : print();

pushOFFSET FLAT:??_C@_09DNLH@121234245?$AA@; `string'
pushOFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
call??6std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@PBD@Z ; std::operator<<
addesp, 8
movesi, eax
movecx, esi
push10; 0000000aH
call?put@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@D@Z ; std::basic_ostream<char,std::char_traits<char> >::put
moveax, DWORD PTR [esi]
xoredi, edi
movecx, DWORD PTR [eax+4]


leaeax, DWORD PTR [ecx+esi]
movcl, BYTE PTR [ecx+esi+4]
testcl, 6
jneSHORT $L8668
moveax, DWORD PTR [eax+40]
movecx, eax
movedx, DWORD PTR [eax]
callDWORD PTR [edx+44]
cmpeax, -1
jneSHORT $L8668
movedi, 4
$L8668:
moveax, DWORD PTR [esi]
movecx, DWORD PTR [eax+4]
addecx, esi
testedi, edi
jeSHORT $L8688
moveax, DWORD PTR [ecx+4]
movedx, DWORD PTR [ecx+40]
oreax, edi
testedx, edx
jneSHORT $L8685
oral, 4
$L8685:
push0
pusheax
call?clear@ios_base@std@@QAEXH_N@Z; std::ios_base::clear
$L8688:
popedi

; 16   : return 0;

xoreax, eax
popesi

; 17   : }

ret0
_mainENDP
_TEXTENDS


关键是 release 版

print() 这个函数调用的代码,没有生成。
生成的是 cout<<"121234245"<<endl; 

即调用 std::operator <<的代码

这不是内联是什么!!!!

热点排行