C++中Static的作用

  Static关键字,在C++中可以用来修饰变量和函数,变量又分为全局变量、局部变量、成员变量,而函数也分为普通函数和成员函数,下面具体说说不同使用情况下的作用。

一、全局静态变量

  static修饰全局静态变量后:

    (1)在全局数据区内分配内存

    (2)如果没初始化默认值为0

    (3)该变量在文件内可见

二、定义局部静态变量

  (1)仍在全局数据区内分配内存

  (2)如果不显示初始化,那么将被隐式初始化为0

  (3)它始终驻留在全局数据区,直到程序运行结束

     (4)作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束

如下例子:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 void test(){
 6     static int i;
 7     i+=5;
 8     cout<<i<<endl;
 9 }
10 
11 int main()
12 {
13     test();
14     test();
15     return 0;
16 }

其结果为:

5
10

可见,虽然i离开作用域,但仍驻留在全局数据区,直到程序运行结束,且多次调用,只初始化一次。

三、静态数据成员

  (1)内存分配:在程序的全局数据区分配,所有对象包括派生类对象共享

  (2)初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中初始化。

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 class Statictest{
 6 public:
 7     static int i;//声明但未定义
 8 };
 9 
10 int Statictest::i = 1;//定义同时初始化
11 
12 int main()
13 {
14     cout << Statictest::i << endl;
15     return 0;
16 }

四、静态函数

  (1)只能在文件中使用

  (2)inline函数默认为static

五、静态成员函数

  (1)静态成员函数不能访问非静态数据成员

  (2)可直接通过类名调用

  (3)没有this指针

 

posted @ 2017-07-07 15:32  爱吃土豆的男孩  阅读(228)  评论(0编辑  收藏  举报