标签:static关键字 数据区 上下文 产生 程序 上下文环境 数据 自动 拷贝
在不同的语言环境、或者同一语言不同上下文环境中,static关键字具有不同的意思。
1、C语言中
1.1 声明为static的变量具有以下三部分特性:
1)存储位置:存储于静态内存中
2)创建与作用域:静态变量在程序运行之前创建,在程序的整个执行期间始终存在。
3)初始化取值
1.2 类型
1.2.1 静态全局变量:
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在)
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:全局静态变量在声明他的文件之外是不可见的。准确地讲从定义之处开始到文件结尾。
好处:
定义全局静态变量的好处:
<1>不会被其他文件所访问,修改
<2>其他文件中可以使用相同名字的变量,不会发生冲突。
1.2.2静态局部变量:
1)内存中的位置:静态存储区
2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)
3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。
1.2.3 静态函数
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
定义静态函数的好处:
1)其他文件中可以定义相同名字的函数,不会发生冲突
2) 静态函数不能被其他文件所用。
2、C++中
2.1静态数据成员
在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.
1)存储位置:静态数据成员存储在全局数据区
2)初始化:
3)静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。
4)访问方式:<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>
5)在没有产生类的实例时,也可以访问静态数据成员
因为静态数据成员在全局数据区分配内存,属于本类的所有对象共享,所以,它不属于特定的类对象,在没有产生类对象时其作用域就可见,即在没有产生类的实例时,我们就可以操作它;
2.2静态成员函数
特点:
1)非静态成员函数可以任意地访问静态成员函数和静态数据成员;
2) 静态成员函数不能访问非静态成员函数和非静态数据成员;
3)由于没有this指针的额外开销,因此静态成员函数与类的全局函数相比速度上会有少许的增长;
4)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>(<参数表>)
标签:static关键字 数据区 上下文 产生 程序 上下文环境 数据 自动 拷贝
原文地址:http://www.cnblogs.com/Miss-Bueno/p/7625462.html