码迷,mamicode.com
首页 > 编程语言 > 详细

关于C/C++中,对static关键字的理解

时间:2017-10-04 14:31:26      阅读:191      评论:0      收藏:0      [点我收藏+]

标签: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)调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>(<参数表>)

关于C/C++中,对static关键字的理解

标签:static关键字   数据区   上下文   产生   程序   上下文环境   数据   自动   拷贝   

原文地址:http://www.cnblogs.com/Miss-Bueno/p/7625462.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!