C++静态变量

C++静态变量有三种:

  1. 无连接性的
  2. 内部连接性的
  3. 外部连接性的

首先看下面的代码:

#include <iostream>

using namespace std;

const int local_int = 10;
extern const int global_int = 20;
int global = 1000;
static int one_file = 2000;

void func1()
{
    int fun_val = 1;
    static int static_fun_val = 2;

    cout << endl << "func1: " << endl;
    cout << "global : " << global << endl;
    cout << "one_file : " << one_file << endl;
    cout << "fun_val : " << fun_val << endl;
    cout << "static_fun_val : " << static_fun_val << endl;

    fun_val++;
    static_fun_val++;
}

void func2()
{
    cout << endl << "func2: " << endl;
    cout << "global : " << global << endl;
    cout << "one_file : " << one_file << endl;
}


int main()
{
    func1();
    func1();

    func2();

    return 0;
}

运行结果是:

func1: 
global : 1000
one_file : 2000
fun_val : 1
static_fun_val : 2

func1: 
global : 1000
one_file : 2000
fun_val : 1
static_fun_val : 3

func2: 
global : 1000
one_file : 2000

在这里, glocal 是一个链接性为外部的静态变量,即其他文件中也可以使用global这个变量。
而one_file通过使用static关键字,把它的链接性设为内部的,则只有在这个文件内可以使用。

而在func1里面的两个变量: fun_val 和 static_fun_val:
fun_val 是函数执行时创建的一个变量,
而static_fun_val 是即使函数不执行,也会保留在内存中。而且它的初始化只会执行一次。

另外,这里还要注意的是:
const默认是内部链接属性,即定义为const的变量只可以在本文件内使用。
如果要给其他文件使用的话,需要加上extern。