存储类

 

static 存储类

static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不须要在每次它进入和离开做用域时进行建立和销毁。所以,使用 static 修饰局部变量能够在函数调用之间保持局部变量的值。ios

static 修饰符也能够应用于全局变量。当 static 修饰全局变量时,会使变量的做用域限制在声明它的文件内。函数

在 C++ 中,当 static 用在类数据成员上时,会致使仅有一个该成员的副本被类的全部对象共享。spa

实例

#include "pch.h"
#include <iostream>
using namespace std;

void func();

int main()
{
	int count = 10;
	while(count--) {
		func();
    }
}

void func() {

	static int i = 10;
	i--;
	cout << i;
	cout << '\n';
}

 

当上面的代码被编译和执行时,它会产生下列结果:线程

9
8
7
6
5
4
3
2
1
0

 能够看出,每次执行func函数时,静态变量 i 不随 每次进入func做用域初始化为10code

 

extern 存储类(让另外一个文件引用其余文件的变量)

extern 存储类用于提供一个全局变量的引用,全局变量对全部的程序文件都是可见的。当您使用 'extern' 时,对于没法初始化的变量,会把变量名指向一个以前定义过的存储位置。对象

当您有多个文件且定义了一个能够在其余文件中使用的全局变量或函数时,能够在其余文件中使用 extern 来获得已定义的变量或函数的引用。能够这么理解,extern 是用来在另外一个文件中声明一个全局变量或函数。blog

extern 修饰符一般用于当有两个或多个文件共享相同的全局变量或函数的时候生命周期

 

thread_local 存储类

使用 thread_local 说明符声明的变量仅可在它在其上建立的线程上访问。 变量在建立线程时建立,并在销毁线程时销毁。 每一个线程都有其本身的变量副本。作用域

thread_local 说明符能够与 static 或 extern 合并。编译器

能够将 thread_local 仅应用于数据声明和定义,thread_local 不能用于函数声明或定义。

相关文章
相关标签/搜索