voidFoo(intx,inty);
inlinevoidFoo(intx,inty)//inline与函数定义体放在一起
{
...
}
所以说,inline 是一种“用于实现的关键字”,而不是一种“用于声明的关键字”。对于以上例子,林锐还建议,只在定义前加上inline,而不是在声明和定义前都加,因为这能体现高质量C/C 程序设计风的一个基本原则:声明与定义不可混为一谈。
c.inline对于编译器来说只是一个建议,编译器可以选择忽略该建议。换句话说,哪怕真的写成了inline,也没有任何错误的情况下,编译器会自动进行优化。内联函数所以当inline中出现了递归,循环,或过多代码时,编译器自动无视inline声明,同样作为普通函数调用。
总结下:
楼主觉得可以将内联理解为C中对于函数专有的宏,对于C的函数宏的一种改进。对于常量宏,C提供const替代;而对于函数宏,C提供的方案则是inline。在C中,大家都知道宏的优势,编译器通过复制宏代码的方式,省去了参数压栈,生成汇编的call调用,返回参数等操作,虽然存在一些安全隐患,但在效率上,还是很可取的。
不过函数宏还是有不少缺陷的,主要有以下:
a.在复制代码时,容易出现一想不到的边际效应,比如经典的
#defineMAX(a,b)(a)>(b)?(a):(b)
在执行语句:
result=MAX(i,j)2;
时,会被解释为
result=(i)>(j)?(i):(j)2;
b.使用宏,无法进行调试,虽然windows提供了ASSERT宏
c.使用宏,无法访问类的私有成员
所以,C 通过内联机制,既具备宏代码的效率,又增加了安全性,还可以自由操作类的数据成员,算是一个比较完美的解决方案。
关于宏,大家还可以参考下:,更原创,内容丰富,可取,总结了各家观点,稍微整理了下,不过还是蛮清楚的。
就这样吧,菜鸟goes on ~~~
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-34429-2.html
开玩笑
5亿
防空