回调和递归是一回事吗?

[复制链接]
查看11 | 回复3 | 2011-10-31 12:34:13 | 显示全部楼层 |阅读模式
VC那些程序比如说OnMouseMove,它执行完了最后依据仍是CView::OnMouseMove(nFlags,point)。关于这个书上说是回调,就是反复执行,因为鼠标一直按着比如说你要画线那么就是已知循环执行里面的画线程序。但我怎么感觉这种形式和n阶乘的那种自身调用自身的形式没有什么区别,明明就是在OnMouseMove里面调用了自己的OnMouseMove嘛,好担心由于不断“递归”导致栈空间过大而耗尽内存哦。。。请问这两者究竟有什么区别呢?
回复

使用道具 举报

千问 | 2011-10-31 12:34:13 | 显示全部楼层
回调和递归是两回事。回调是你注册函数到系统或者库,系统或库在合适的时候调用你的函数。比如vc编程中OnXXX之类的,就是回调,但鼠标移动的时候,会调用你的OnXXX执行特定处理。递归则是完全不同的概念,是一个函数直接或者间接的调用自己,除非编译器能智能的把递归转换为非递归的(比如尾递归的优化),否则由于需要保存递归的记录,太多的递归调用会导致栈的溢出。
回复

使用道具 举报

千问 | 2011-10-31 12:34:13 | 显示全部楼层
此乃函数重载.比如:CView::OnMouseMove你不调用它,难道你准备自己写个完全的?多麻烦请看此函数的原代码.赞同
回复

使用道具 举报

千问 | 2011-10-31 12:34:13 | 显示全部楼层
一个可存可取,一个只取不存赞同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行