inline与宏定义
Inline内敛函数是c++引入的机制,其目的是解决使用宏定义的一些缺点。 引入内联函数的主要目的是用它代替C中表达式形式的宏定义,解决程序中函数调用的效率问题。
宏是用预处理器实现的,没有了参数压栈,代码生成等一系列操作,因此效率很高,但是其不能进行参数的有效性检查,也没有C++编译器严格类型检查的好处,另外它的返回值也不能被强制转换成为可转换的合适类型。这样 使用它就存在着隐患和局限性。 Inline推出的目的就是为了取代这种宏定义,消除了宏的缺点,又继承了其优点。
●inline函数的优越性
inline定义类的内联函数,函数代码被放入符号表中,在使用时直接进行替换,没有调用的开销,效率很高。
类的内联也是一个真正的函数 ,编译器在调用一个内联函数时,首先会检查它的参数 的类型,保证调用正确。然后在进行一系列的相关检查,就像对待任何一个真正的函数一样 ,这样就消除了它的隐患和局限性。
内联可以作为某个类的成员函数。
●inline的使用示例
图像型火焰探测器class A { private: int nTest; public: int readTest() { 升频 return nTest; } void setTest(int i); }; inline void A::setTest(int i) { nTest = i; 电子围栏技术} |
|
类A的成员函数readTest()和setTest()都是inline函数。readTest()函数的定义体被放在类声明中,因而readTest()自动转换成inline函数 。setTest函数的定义体在类声明之外,因此要加上inline关键字。
●内联的缺点
内联是以代码膨胀为代价的,仅仅省去了函数调用的开销,从而提高函数的执行效率。一方面,如果执行函数体内的代码的时间相比于函数调用的开销大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的代码量增大,消耗更多的内存空间。以下情况不宜使用内联。
1.如果函数体内的代码比较长,使用内联将导致内存消耗代价较高。
2.如果函数体内出现循环,那么执行函数体代码的时间要比函数调用的开销大水浴式汽化器
●内联和宏的区别
家庭供暖系统1.内联函数是在编译时展开的,宏在预编译时展开的。
2.在编译的时候内联函数可以直接被嵌入到目标代码,而宏只是一个简单的文本替换。
3.内联函数可以完成诸如类型检测,语句是否正确等编译功能,宏就不具有这样的功能。
4.宏不是函数,inline函数是函数
5.宏在定义的时候一定要小心处理宏参数,否则容易出现二义性。而内联函数定义时不会出现二义性。
●更多请前往个人文库
wenku.baidu/p/helpylee