天天看点

内联函数相关知识总结

内联函数和static的区别

1)内联函数没有清栈开销,static有清栈开销;

2)inline因为变异阶段代码展开,函数文件可见

static 符号属性为l(local)本文件可见

内联函数和宏的区别

内联函数和普通函数相比可以加快程序的速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌在目标代码中。而宏只是一个简单的替换。

内联函数要做参数类型检查,这是内联函数和宏相比的优势。

inline是指嵌入代码,就是在调用函数的时候不是跳转,而是直接把代码写到那里去。对于短小代码来书inline增加空间消耗换来的是效率的提高,这方面是和宏一样的,的那好似inline在和宏相比没有付出任何代价的情况下更安全。

inline一般只用于如下情况

(1)一个函数不断重复被调用。

(2)函数只有简单几行,且函数内不包含for,while,switch语句。

宏在c中很重要的但是在c++中就少多了。关于宏的第一规则是绝不应该去使用它,除非你不得不这么做。

宏的代码处是不加任何验证的简单替代,而内联函数则是直接将代码插入调用处,而减少了普通函数调用的资源消耗。

inline必须和函数定义体放在一块才能使函数称为内联,仅将函数放在函数声明前不起任何作用。

内联是以代码膨胀为代价仅仅省去函数调用的开销,从而提高函数的执行效率。每一处的调用都要复制代码,将使总代码量增加,消耗更多的内存空间

以下情况不适合使用内联

1)函数的代码较长,使用内联导致内存消耗代价太高

2)函数体内出现循环,那么执行函数体内的代码的时间要比函数调用的开销更大,此外要当心构造函数和析构函数会隐藏一些行为,比如”偷偷的“执行基类或成员对象的构造和析构函数。所以不要随机将构造函数和析构函数的定义体放在类声明里。内联函数只是给编译器的一个"建议",一个好的编译器会取消不值得的内联。

继续阅读