C++基础之Static(我要跳槽到全局)

来源:互联网 发布:php 超全局变量 编辑:程序博客网 时间:2024/06/10 08:01

今天在封装多线程的时候我频繁的用到了static,现在就来彻底解析一下

static 是个关键字,修饰变量~修饰函数,修饰后叫静态,存储的位置在全局数据区

static + 全局\局部\成员变量 = 静态全局\局部\成员变量

资料上说加全局静态变量和全局变量的区别在于前者只能在此……(有兴趣百度多的是)

对我有用的是我发现一:成员变量加了static我在其他的cpp中可以用了

情况一:我有一个成员变量封装在Text的cpp里,在main的cpp里赋值,但是操作都在封装的cpp里,而在封装的时候这个变量的数据不清楚大小

static解决:我在类里将变量写成static的,然后类里的函数对这个变量操作,在main的cpp里我将这个变量赋值

需要注意的:定义这个变量(或者说先找到这个变量,因为这个变量不是纯粹的全局变量,是静态成员变量,所以需要先找到这个变量,怎么找呢,类型+作用域这个变量,如果不赋值,默认为赋值0

text.cpp                main.cppclass                 int text::a ;{public:                static int a;}
总结:解决的我要跨cpp用变量的问题(静态成员变量)

情况二:我封装的卖票多线程程序将线程的回调函数写在类中,以成员函数的形式,问题是线程回调函数的调用方式是WINAPI,是标准调用,成员函数是this调用,线程回调函数前面我加static

总结:解决我不是一个地方的东西写在这里没有被踢出门外的问题(静态成员函数)

情况三:我函数中有一个变量,大家也都知道,除了函数,这个局部变量就没有了,我现在要求,多次调用这个函数,且这个函数中的这个局部变量的值可以累积

解决:将局部变量写成静态(静态局部变量)

总结:解决我消失的变量问题

static一般混同全局,但确实有区别,两个概念,作用域和生存周期

全局:生存周期:运行的时候就存在,一直存在--------------作用域:这个程序的所有文件都可以用

静态全局:生存周期:运行的时候就存在,一直存在—————作用域:这个程序中定义静态的文件中可用(很少很少用到)

0 0