static的最基本含义是“位置不变的某个东西”,在程序设计语言中则指内存中的物理位置或文件中的可见性。
在c和c++中,static通常有两种基本的含义:
1)在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的,这就是静态存储的概念。
2)对一个特定的编译单位来说是本地的,这里的static控制名字的可见性,所以这个名字在这个单元或类之外是不可见的。这也描述了连接的概念,它决定连接器将看到哪些名字。
1.函数中的static
静态存储的概念。
如果没有为一个预定义类型的static变量提供初值的话,编译器会确保在程序开始时它被初始化为“0”
而对于用户自定义的静态对象则需要使用构造函数来初始化,当程序从main块退出时执行析构函数。
全局静态对象的初始化是在main前进行的,所以有了一个在main前执行一段代码的简单的,可执行的方法。
2.控制连接
在文件范围内,一个被声明为static的变量或者函数名字对编译单元(.cpp)来说是局部变量。
文件范围内的变量都是静态存储的,这是的static用来约束可见性:
static int i;//局部可见
extern int i;(int i;)//全局可见
对于函数static和extern也是用来约束可见性的。
3.类中的static
类中的static变量是静态存储的概念,所有的对象共用这一个变量。类中只能对非const成员做声明,定义必须在外面进行。。
静态成员函数:它为类的全体服务而不是为类的一部分对象服务,静态成员函数不能访问一般成员,它只能访问静态成员,也只能调用其它静态成员函数。
阅读(681) | 评论(0) | 转发(0) |