C++: static

一. 修饰全局变量

  全局变量加上static就成了静态全局变量。

  存储位置:在程序的静态/全局区

  生命周期:整个软件运行周期。

  作用域:只在该文件中全局可见。

  初始化:没有专门初始化的变量,默认为0。

 

二. 修饰局部变量

  只有作用域与静态全局变量不同,作用在局部。但是随着函数的结束并不销毁,当函数再次进入时还是上一次调用的结果。

 

三. 修饰全局函数

  将全局函数的作用域限制在当前文件中。

  注意:不要在头文件中声明static函数。如果只在cpp文件中声明函数,需要加上static声明。

 

四. 修饰类成员变量

  类的所有对象共用这一个成员变量。

  在内存中只有一份,所以 不占用对象的内存:使用sizeof(class)不会计算static 成员变量的内存。

 

五. 修饰类成员函数

  不能访问非静态成员变量,可以访问静态成员变量。

static类的静态成员函数:

  可以访问类中的私有成员。

class A{
public:
  static int modify(A* a)
  {
      a->m_n = 1;
  }
private:
  int m_n;
}

 

静态变量初始化时机:

对于全局变量,全局静态变量,类静态成员变量分为:

  静态初始化:以常量对变量进行赋值的。

    在程序加载时进行初始化。

  动态初始化:需要调用函数进行初始化的(包括构造函数),

    是在main函数前由静态初始化过程分配内存并且初始化。

对于局部静态变量,在第一次调用时进行初始化。

 

对于初始化时线程安全性:

  c++11前,语言特性不保证初始化时的线程安全。

  c++11后,保证了线程的安全。

posted @ 2022-02-09 20:36  Dylan_Liang  阅读(63)  评论(0编辑  收藏  举报