一级棒(Eachfun)
RSS订阅
内联函数
发表时间:2006-08-05 00:32:00 关键词:C++,MFC,VC,Primer,编程,教程,读书

  内联函数应该是为了改善C语言中的宏替换的不足而产生的吧。因为宏替换是预编译中直接展开的,展开过程中将产生意想不到的结果。典型的有“#define MAX(a, b) (a) > (b) ? (a) : (b)”。“result = MAX(i, j)+2;”将被展开为“result = (i) > (j) ? (i) : (j) + 2;”。虽然外面再加一对括号可以解决以上问题,但是“result = MAX(i++, j);”被展开后将导致i被自增1了两次。(以上例子摘自林锐博士的《高质量C++/C编程指南》第66页,林锐管这叫做“边际效应”)
  C++用内联来取代宏替换,大大提高了安全性。虽然内联函数也是编译时展开的,但是它能进行安全检查,还能处理类的成员函数(原因是内联函数能够处理this指针,宏却不能)。
  引用:内联对编译器来说只是一个建议,编译器可以选择忽略这个建议。
  笔记:也就是说,有些函数你想内联,编译器也不一定会采纳。因为内联函数虽然减少了函数调用的开销,却增加了程序的体积。
  内联函数是唯一允许实体多次被编译的函数。原因是编译器必须先编译这个函数体,才能在编译函数调用的地方进行合理地展开。这就说明在多个CPP文件组成的工程中,可能有不止一个CPP文件中要有函数的实体。既然这样,就放进头文件吧。

本站特约顾问律师常州东晟律师事务所朱立律师(电话13915029670,QQ646146109)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
相关评论
  • 是这样的,我们不应该怪C标准不好,
    虽然它不能让result = MAX(i++, j);这种问题得到解决,
    产生i被自增两次这样的结果,程序员应该自己去避免。
    但是,如果标准有进步了,我们倒是因为祝贺它一下。
    person偷猫 link未填 QQ未填 email未填 时间:2006-08-06 01:34:48
  • 我觉得象这个max()和以前的数组越界一类的事,都可以归纳为一句话,那就是,C为我们提供了强大的工具,那些不会使用的人才会出现这种错误.连个数组越界也管理不好的,还是去写武侠小说比较好.
    比如火药发明了以后,我们可以用来炸山开路什么的,难道因为有人用于战争,就怪这个火药功能不够完善吗?
    personwalkman link未填 QQ未填 email未填 时间:2006-08-05 13:10:21
1
发表评论
称呼:
QQ:
邮箱:
链接:
内容:
搜索: 百度搜索 Google搜索
Copyright©2000 - 2008 Eachfun.Com, All Rights Reserved 一级棒网络
苏ICP备05080156号
一级棒建站系统 http://www.eachfun.com 一级棒版权所有,未经许可不得商用!