从汇编的眼光看C++(之递归函数与模板类) (二)

2014-11-24 12:43:52 · 作者: · 浏览: 1
edi]

252: return 0;

004020A8 xor eax,eax

253: }

004020AA pop edi

004020AB pop esi

004020AC pop ebx

004020AD mov esp,ebp

004020AF pop ebp

004020B0 ret

250: static int process()

251: {

00402090 push ebp

00402091 mov ebp,esp

00402093 sub esp,40h

00402096 push ebx

00402097 push esi

00402098 push edi

00402099 lea edi,[ebp-40h]

0040209C mov ecx,10h

004020A1 mov eax,0CCCCCCCCh

004020A6 rep stos dword ptr [edi]

252: return 0;

004020A8 xor eax,eax

253: }

004020AA pop edi

004020AB pop esi

004020AC pop ebx

004020AD mov esp,ebp

004020AF pop ebp

004020B0 ret

看的出来,这里才是真正的递归出口,到了这里之后,函数开始折返,这也就意外着我们的计算即将结束。所有的流程和递归非常相似。所以递归函数和模板递归的区别就是一点:递归函数是在代码执行的时候完成的,模板递归是在编译的时候完成的。

思考题:

自己编写一个阶乘的函数?尝试一下是否可以转变成递归函数?是否可以用模板类递归得到呢?