手把手教你学C++九)--C++ 存储类

目录

1. 自动存储类(Automatic Storage Class)

auto 和 register

2. 静态存储类(Static Storage Class)

static

3. 外部存储类(External Storage Class)

extern

示例:

4. 线程局部存储类(Thread Local Storage Class)

thread_local

示例:

总结


 

在 C++ 中,存储类(storage class)也称为存储类型(storage type),用于描述变量的生存期(lifetime)和可见性(visibility)。存储类决定了变量何时被创建、何时被销毁以及在何处可以访问。C++ 支持以下几种存储类:

1. 自动存储类(Automatic Storage Class)

auto 和 register

  • auto:从 C++11 开始,auto 关键字用于自动推断变量的类型。auto 本身并不是一个存储类,但它可以与局部变量一起使用,以简化类型声明。

     
    cpp

    深色版本

    auto x = 10; // 类型为 int
  • registerregister 关键字建议编译器将变量存储在寄存器中,以加快访问速度。然而,在现代编译器中,是否使用寄存器由编译器决定,register 更多地是一个提示而非强制要求。

     
    cpp

    深色版本

    register int regVar = 10; // 建议存储在寄存器中

2. 静态存储类(Static Storage Class)

static

static 关键字用于指定变量具有静态存储持续期,即在整个程序执行期间都存在。根据变量声明的位置,static 可以有不同的含义:

  • 局部变量:在函数内部声明的 static 变量在整个程序执行期间存在,即使函数退出后也不会被销毁。

     
    cpp

    深色版本

    void func() {
        static int count = 0;
        count++;
        std::cout << "Count: " << count << std::endl;
    }
  • 全局变量:在文件范围内声明的 static 变量只能在声明它的文件内部访问。

     
    cpp

    深色版本

    static int globalVar = 10;

3. 外部存储类(External Storage Class)

extern

extern 关键字用于声明一个变量或函数是在其他地方定义的。通常用于在多个源文件之间共享变量或函数。

示例:

假设你有两个源文件 main.cpputil.h

util.h

 

cpp

深色版本

extern int globalVar;

util.cpp

 

cpp

深色版本

int globalVar = 100;

main.cpp

 

cpp

深色版本

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

int main() {
    cout << "Global variable: " << globalVar << endl; // 访问定义在 util.cpp 中的 globalVar
    return 0;
}

4. 线程局部存储类(Thread Local Storage Class)

thread_local

thread_local 关键字用于声明一个变量在线程内的本地存储。这意味着每个线程都有自己的副本。

示例:

 

cpp

深色版本

#include <iostream>
#include <thread>
using namespace std;

thread_local int threadVar = 0;

void increment() {
    threadVar++;
    cout << "ThreadVar: " << threadVar << endl;
}

int main() {
    thread t1(increment);
    thread t2(increment);

    t1.join();
    t2.join();

    return 0;
}

总结

存储类在 C++ 中用于描述变量的生存期和可见性,正确使用存储类可以帮助你更好地控制变量的作用域、生命周期以及内存管理。以下是 C++ 中常见的存储类及其特点:

  1. auto:用于自动推断类型,不是存储类。
  2. register:建议编译器将变量存储在寄存器中。
  3. static:指定变量具有静态存储持续期,可以用于局部变量和全局变量。
  4. extern:声明变量或函数在其他地方定义。
  5. thread_local:指定变量在线程内的本地存储。

通过合理使用这些存储类,你可以编写出更清晰、更安全、更高效的 C++ 程序。随着编程经验的积累,你会更加熟练地运用这些概念来优化你的代码结构。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值