今天在封装多线程的时候我频繁的用到了static,现在就来彻底解析一下
static 是个关键字,修饰变量~修饰函数,修饰后叫静态,存储的位置在全局数据区
static + 全局\局部\成员变量 = 静态全局\局部\成员变量
资料上说加全局静态变量和全局变量的区别在于前者只能在此……(有兴趣百度多的是)
对我有用的是我发现一:成员变量加了static我在其他的cpp中可以用了
情况一:我有一个成员变量封装在Text的cpp里,在main的cpp里赋值,但是操作都在封装的cpp里,而在封装的时候这个变量的数据不清楚大小
static解决:我在类里将变量写成static的,然后类里的函数对这个变量操作,在main的cpp里我将这个变量赋值
需要注意的:定义这个变量(或者说先找到这个变量,因为这个变量不是纯粹的全局变量,是静态成员变量,所以需要先找到这个变量,怎么找呢,类型+作用域这个变量,如果不赋值,默认为赋值0)
text.cpp main.cpp
class int text::a ;
{
public:
static int a;
}
总结:解决的我要跨cpp用变量的问题(静态成员变量)
情况二:我封装的卖票多线程程序将线程的回调函数写在类中,以成员函数的形式,问题是线程回调函数的调用方式是WINAPI,是标准调用,成员函数是this调用,线程回调函数前面我加static
总结:解决我不是一个地方的东西写在这里没有被踢出门外的问题(静态成员函数)
情况三:我函数中有一个变量,大家也都知道,除了函数,这个局部变量就没有了,我现在要求,多次调用这个函数,且这个函数中的这个局部变量的值可以累积
解决:将局部变量写成静态(静态局部变量)
总结:解决我消失的变量问题
static一般混同全局,但确实有区别,两个概念,作用域和生存周期
全局:生存周期:运行的时候就存在,一直存在--------------作用域:这个程序的所有文件都可以用
静态全局:生存周期:运行的时候就存在,一直存在—————作用域:这个程序中定义静态的文件中可用(很少很少用到)