1. 隐藏性
在某.c文件下变量及函数由static限制后,就会对其他源文件隐藏
利用这一特性就可以在不同文件里定义同名变量了!不用担心变量冲突了!
对于被static修饰的函数来说,作用只有一个隐藏性。但是static修饰的变量不但有隐藏性,还有下面几点特性。
2. static变量的记忆功能和全局生存期
static变量是保存在静态数据区,而保存在这里的变量都会在程序一开始就进行初始化且只会进行一次初始化。(全局变量和static变量都存储在静态数据区)
static作为局部变量在函数中时,它的生存期也为整个源程序,但是它的作用域与自动变量相同,只有在定义该变量的函数内可以使用该变量,等到函数结束后,虽然该变量仍然存在,但是却不能使用它。
3. 类成员中的static
如果一个变量是类的一部分,但是它却不是变量的一部分,那么我们就可以用static来限制它。一个static成员函数只有唯一一份副本,所以在对象中,我们无法使用this指针去调用该对象。
同理,一个需要访问类成员但是不需要针对指定对象去调用函数,那么我们就可以用static限制成员函数。
一般程序的由new产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。
4. 其他
我们不能使用const和static同时修饰成员函数。因为c++编译器默认会给成员函数加上隐式的const this*,而static修饰成员函数不能出现this指针,这样会产生冲突。
5. static变量可以在程序哪个部分进行空间分配
- 头文件
- 类定义的内部实现
- main()函数前的全局数据声明和定义处。
内容引用1
网友评论