概述
inline函数
inline函数的目的是解决程序中函数调用的效率问题,也是用内联取代了宏定义(函数传参比宏方便)
inline只是一种对编译器的建议请求,能阻止这样建议的条件:
a.循环语句switch/goto
b.递归函数
c.含static函数
inline在类体中和类外定义成员函数是有区别的,在类体定义的成员函数为inline函数,在类外定义的不是。
a.如果你既希望将函数定义在类体外部,又希望它是inline,那么可以在声明它的时候加上inline关键字。但是类外定义inline,则必须把类定义和成员函数定义放在同一个头文件中,否则编译时无法嵌入。
b.在类体定义的函数也可以加inline,但是多余,因为类体定义的成员函数默认为inline函数
inline函数代码都被放入符号表中,使用时直接替换(像宏一样直接就地展开),没有调用的开销,效率高,类的inline函数也是一个真正的函数,编译器在调用一个inline函数时,会首先检查它的参数类型保证调用正确,然后进行一系列的相关检查,消除隐患。inline没有调用的开销,直接代替,会增加目标程序的代码量,进而增加空间的开销,inline可以减少cpu的系统开销,加快程序速度。但是当inline函数很大时,会起相反的作用。
static函数
static函数目的是让static修饰的函数只在本地文件可见
static内部机制:
静态数据成员是在程序一开始运行时就必须存在,因为函数在程序运行中被调用,所以静态数据成员不能在任何成员函数内分配空间和初始化。静态数据成员要实际分配空间,所以不能在类的声明中定义(只能声明数据成员),类声明一个类的“尺寸和规格”,并不进行实际的内存分配,她也不能在头文件中类声明的外部定义,因为会造成使用该类的源文件中,对其重复定义。
static修饰的变量的特征
a.变量会被放在程序的全局存储区中,这样下一次调用时还会保持原来的赋值
b.变量用static告知编译器,自己仅在变量的作用范围内可见
变量可分为:全局变量、全局静态变量、静态局部变量、局部变量,前三者在静态存储区,后者在栈区
a.全局变量:整个工程文件内都有效
b.静态全局变量:只在定义它的文件内有效(改变了生存周期):不被其他文件访问;其他文件不会出现符号重复问题
c.静态局部变量:只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失
d.局部变量:只在定义它的函数内有效,但是函数返回后失效
全局变量与静态全局变量的区别:static全局变量只初始化一次,防止在其他文件中被使用
静态局部变量与局部变量的区别:static局部变量只初始化一次,下次用上一次的结果值
static函数与普通函数的区别:static函数在内存中仅此一份,普通函数在每次调用中维持一份拷贝
static的优势:
可以节省内存,因为它是所有对象所共有的,因此,对多个对象来说,静态数据成员只存储一处,供所有对象使用,它的值可以更新,只要对静态数据成员的值更新一次,保证所有对象存取更新后的相同的值,这样提高时间效率。
最后
以上就是迅速板凳为你收集整理的inline与static的全部内容,希望文章能够帮你解决inline与static所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复