zoukankan      html  css  js  c++  java
  • 存储类

     

    static 存储类

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

    static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

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

    实例

    #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 << '
    ';
    }
    

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

    9
    8
    7
    6
    5
    4
    3
    2
    1
    0
    

     可以看出,每次执行func函数时,静态变量 i 不随 每次进入func作用域初始化为10

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

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

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

    extern 修饰符通常用于当有两个或多个文件共享相同的全局变量或函数的时候

    thread_local 存储类

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

    thread_local 说明符可以与 static 或 extern 合并。

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

  • 相关阅读:
    Python 3.6安装yaml时报"AttributeError: module 'pip' has no attribute 'main'"和“Non-zero exit code”错误
    Python 3.6版本中实现 HTMLTestRunner输出时”fp=file(filename,'wb')“报错
    LoadRunner录制脚本时没有响应——无法启动浏览器问题总结
    python中print不换行
    python中for循环的三种遍历方式
    python enumerate用法
    Python中添加中文注释报错SyntaxError: Non-UTF-8 code starting with 'xc1'
    pycharm 2017最新激活码
    设计模式之禅2之六大原则
    hibernate错误整理
  • 原文地址:https://www.cnblogs.com/echoboy/p/10391744.html
Copyright © 2011-2022 走看看