还有个问题,内联函数的定义必须出现在第一次被调用之前,这句话是否正确?
内联函数的定义必须出现在第一次被调用之前,那么如果内联函数的定义出现在第一次被调用之后,是不是说这个内联函数就不是内联函数了呢?比如说:
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 <<的代码
这不是内联是什么!!!!