内联函数
发表时间:2006-08-05 00:32:00 关键词:C++,MFC,VC,Primer,编程,教程,读书
(点击:) 把这篇文章告诉我的QQ或MSN朋友
内联函数应该是为了改善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)提醒您:
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!

偷猫
未填
未填
未填
时间:2006-08-06 01:34:48