C++ 中的存储类(auto、register、extern、mutable)2025 年 4 月 25 日 | 阅读 9 分钟 在 C++ 中,存储类是定义程序中变量(如 auto、register、static 等)的生命周期、作用域和存储位置的关键字。存储类指定了在 C++ 程序中如何为变量分配和释放内存。 语法它具有以下语法: 在此语法中,storage_class 表示存储类,var_data_type 表示变量数据类型,var_name 表示变量名。 简单的 C++ 存储类示例让我们看一个简单的示例来演示 C++ 中的存储类。 示例编译并运行输出 Enter the value of X: 5 Enter the value of Y: 10 Addition result (auto + register): 15 C++ 中存储类的类型C++ 中主要有六种存储类。 ![]() 下表显示了生命周期、可见性和初始值。
1. C++ 中的自动 (auto) 存储类auto 存储类是局部变量的默认存储类。它主要用于为变量声明 auto 类。它使我们能够声明特定数据类型的变量,包括 int、double 和 char。它提供更快的内存访问、逻辑数据组织,并增强程序清晰度和效率。 C++ 自动存储类示例让我们看一个示例来演示 C++ 中的自动存储类。 示例编译并运行输出 15 7.45 Hello TpointTech T 说明 在此示例中,auto 存储类用于变量。auto 关键字不能用于显式声明 auto 变量。 2. C++ 中的寄存器 (register) 存储类在 C++ 中,"register" 存储类主要用于指示编译器将变量存储在寄存器中。我们可以比局部或自动变量更快地访问寄存器变量,尽管它们具有相同的功能。寄存器存储类的默认值为 0。 (&) 运算符不能与寄存器变量一起使用。"register" 存储类的变量也具有自动存储持续时间。 C++ 寄存器存储类示例让我们看一个示例来演示 C++ 中的寄存器存储类。 示例编译并运行输出 i = 0, count = 2 i = 1, count = 3 i = 2, count = 5 i = 3, count = 8 i = 4, count = 12 i = 5, count = 17 i = 6, count = 23 3. C++ 中的静态 (static) 存储类在 C++ 中,静态存储类用于声明在整个程序持续时间内保持其值的变量。静态变量使用 static 关键字声明。我们可以多次声明静态变量,但变量值只能赋值一次。 局部变量在程序启动时创建,在程序终止时销毁。"static" 变量在块或函数内具有局部作用域,但它们的值在函数调用之间保持不变。它们通常存储在内存的单独数据段中。 C++ 静态存储类示例让我们看一个示例来演示 C++ 中的静态存储类。 示例编译并运行输出 x = 3, Counter = 7 x = 4, Counter = 6 x = 5, Counter = 5 x = 6, Counter = 4 x = 7, Counter = 3 x = 8, Counter = 2 x = 9, Counter = 1 x = 10, Counter = 0 4. C++ 中的外部 (extern) 存储类在 C++ 中,extern 存储类用于提供全局变量的引用。它在函数外部声明。无论何时在 C++ 中声明外部变量,该变量都可以在整个程序中的任何代码行中使用。当多个 C++ 文件共享相同的全局变量和函数时,此 extern 修饰符非常有用。 C++ 外部存储类示例让我们看一个示例来演示 C++ 中带有全局变量的 'extern' 存储类。 示例编译并运行输出 Enter the Value of x: 7 Value of the variable 'x', declared as extern: 7 Modified value of the variable 'x', declared as extern: 7 5. C++ 中的可变 (mutable) 存储类在 C++ 中,mutable 存储类用于通过常量 (const) 函数更改类的一个或多个数据成员。它可以通过mutable 关键字轻松声明,该关键字主要用于使对象的特定数据成员成为修饰符。'mutable' 关键字允许修改 const 对象的某个数据成员,即使在 const 成员函数内部也是如此。 C++ 可变存储类示例让我们看一个示例来演示 C++ 中的可变存储类。 示例编译并运行输出 Before modifying the value of y: 15 After modifying the value of y: 50 6. C++ 中的线程局部 (thread_local) 存储类在 C++ 中,thread_local 存储类是 C++11 中引入的新存储类。它可用于将对象定义为 thread_local。thread_local 对象属性在其变量与多个存储说明符(如 extern 和 static)组合时进行修改。 C++ 线程局部存储类示例让我们看一个示例来演示 C++ 中的 thread_local 存储类。 示例编译并运行输出 After modifying the value of x inside the Main() function: 25 0x771e4eece73c Before modifying the value of x inside the Thread_localTest() function: 40 0x771e4ee006bc The value of x inside the Main() function: 25 0x771e4eece73c C++ 中为什么要使用存储类?在 C++ 中,存储类用于控制变量在内存中的保存方式、它们的生命周期以及它们在程序中的访问位置。C++ 对于管理内存资源、提高效率和确保变量作用域和生命周期至关重要。以下是使用 C++ 中存储类的一些主要原因:
C++ 存储类多选题1. 在 C++ 中,定义为 static 的变量的默认初始值是什么?
答案: b) 0 2. 当在 C++ 程序中声明寄存器变量时,它被分配在哪里?
答案: c) 在 CPU 寄存器中,以便更快访问 3. 在哪个存储类中,const 关键字用于在 C++ 中声明变量?
答案: a) Auto 存储类 4. 下面程序的输出是什么?
答案: b) TpointTech Class: 1 TpointTech Class: 2 5. 以下哪个存储类是 C++ 中全局变量的默认存储类?
答案: d) Extern 下一主题C++ 数组 |
C++ 语言中的函数在其他编程语言中也称为过程或子例程。程序将函数实现为独立的、完成单一任务的代码块,开发人员可以重复调用它们。通过使用函数可以提高编程效率和组织性...
阅读 8 分钟
C++ 中的传值调用和传引用调用 在 C 语言中,有两种向函数传递值或数据的方法:传值调用和传引用调用。原始值在传值调用中不修改,但在传引用调用中修改...
阅读 6 分钟
在 C++ 中,内联函数是使用 inline 关键字定义的函数。在内联函数中,编译器在编译时将函数调用替换为函数的原始代码。其主要目的是提高...
7 分钟阅读
在 C++ 中,递归函数是直接或间接在同一函数内部调用自身的函数。它必须至少包含一个基类和一个递归条件。基类有助于在条件完成后终止条件。在其他...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India