C++中static用法总结

来源:互联网 发布:美国本科预科 知乎 编辑:程序博客网 时间:2024/06/06 02:38

C++中可以用static修饰变量和函数

一、用static修饰变量

1、类外静态变量
  方法: static int staticA = 0;  用途:      可以写在.h文件,也可以写在.cpp文件,该语句既是声明也是定义,该变量的作用域都仅限于cpp文件。      可以在多个cpp文件里定义相同的变量名;也可以在一个h文件里定义,在多个cpp文件里包含这个h文件。
2、类内静态变量
  方法:      在.h文件里声明      class ClassA      {      public:          static int a;      };      在cpp文件里定义      int ClassA::a = 1; //不需要static关键词   用途:      .h文件里声明变量,但不能初始化变量,必须在某个cpp文件里定义该静态变量(定义的时候可以初始化变量),否则会在链接时报错。      能访问ClassA的地方都都可以通过ClassA::a来访问该变量。
3、函数内的静态变量
 方法1:      void func1(int b)      {          static int a = b;      } 方法2:      class ClassA      {      public:          void func1(int b)          {              static int a = b;          }      }; 用途:     只在第一次调用func1函数的时候初始化变量的值,之后会跳过定义的表达式(包括定义时     的赋值操作)。

二、用static修饰函数

1、类外静态函数
  方法: static int func1(int a)        {            return a+1;        }  用途:      可以写.h文件,也可以写在.cpp文件,该语句既是声明也是定义,不能分开写。     (每个cpp里的函数都是独立的拷贝);也可以在一个h文件里定义,在多个cpp文件里包含这个h文件。
2、类内静态函数
  方法:      在.h文件里声明      class ClassA      {      public:          static int func1(int a);      };      在cpp文件里定义      int ClassA::func1(int a)//不需要static关键词      {          return a+1;      }    用途:       可以在声明的时候定义,在可以在cpp文件里定义。       全局只有一份,能访问ClassA的地方都可以通过ClassA::func1来访问该函数。

三、总结

    1、类外的静态变量和静态函数的作用域是文件,而类外的变量和函数的作用域才是全局的,不要混淆;      声明即定义,不需要在cpp文件里再定义一次。    2、函数内的静态变量只声明、定义、初始化一次。    3、类内的静态变量和静态函数的作用域是全局的;      声明和定义可以分开,声明定义在h文件,定义放在cpp文件;      类内的静态变量不能在.h文件里初始化,需要在cpp文件里初始化;      在cpp文件里定义静态变量和静态函数时不需要也不能加上static关键词。
0 0
原创粉丝点击