c语言中:
static如果是修饰的全局变量表示,该变量不能被其他文件使用,函数也是一样.如果修饰局部变量,那么,该变量存放在静态区,只能被初始化一次,生命周期随之文件的结束而结束.
c++中:
static修饰的变量,只能在类外初始化,而且,必须初始化,可以由类直接访问,可以在同族类中实现数据共享,在类中没有存储空间
class school {
public:
school(){
}
public:
string tower;
string lake;
static string lib;
};
school::lib("weifang");
int main(int argc, char *argv[]) {
school a, b;
cout<<sizeof(a)<<sizeof(b)<<endl;
}
static 变量在类外声明,sizeof(a), sizeof(a)的值都是8,没有把lib所占用的空间算在内.
不要因为c和c++有一些语法或者关键字看上去相同,就认为他们的意义和作用是一样的.
顺便提一下volatile变量,防止编译器优化,很多人只是知道这句话,却不知道实际意思,我说一下我的理解,就是告诉编译器,被volatile修饰的变量,以后再用时,不要从寄存器或者cache中获取拷贝,而是直接从变量地址处获取变量值,还有和extern 一起用, extern volatile,volatile告诉编译器,我这个值可能会随时在其他文件发生修改,不要从缓存区取值.
先写这么多吧,以后有了新的认识再添加,
希望大家有什么意见的或者我写的不对的即使提出或者帮我纠正,谢谢