读书人

还有个有关问题内联函数的定义必须出

发布时间: 2013-08-04 18:26:16 作者: rapoo

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


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 <<的代码

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

读书人网 >C++

热点推荐