当前位置:首页 > 行业动态 > 正文

存储类

存储类用于定义对象的属性,包括实例属性和类属性。

存储类是C语言与C++语言的标准中,用于定义变量与函数的可访问性(即作用域范围scope)与生存期(life time)的概念,以下是对存储类的详细解答:

一、存储类

存储类在C语言与C++语言中扮演着至关重要的角色,它们决定了变量和函数的存储位置、生命周期以及可见性,通过合理使用不同的存储类,可以编写出更加高效、清晰且易于维护的代码。

二、存储类分类及特点

1、auto

定义:auto是指定于在{与}所限定的作用域内部的局部变量的缺省存储类。

特点:变量的生命周期与其所在的作用域相同,即当作用域结束时,变量会被销毁,在C++11中,auto关键字还引入了一种新的用法,用于自动类型推断。

示例

     void example() {
         auto intVar = 42;  // 自动推断为 int 类型
         auto doubleVar = 3.14;  // 自动推断为 double 类型
         cout << "intVar: " << intVar << endl;
         cout << "doubleVar: " << doubleVar << endl;
     }

2、register

定义:register关键字提示编译器把局部变量或函数的形参尽可能放入CPU的寄存器中,以便快速访问。

特点:该关键字是一个建议,编译器可能会忽略,register变量不能取地址。

示例

     void example() {
         register int Miles;
     }

3、static

定义:static是全局变量的默认存储类,局部变量也可以具有static存储类。

特点:在函数内,定义静态局部变量,变量的生命周期为整个程序运行期间,但其作用域仅限于函数内部,在全局作用域,定义静态全局变量或函数,使其仅在定义它的文件中可见。

示例

     void Func(void) {
         static sum=1;
     }

4、extern

定义:extern存储类是指全局变量可以被各个对象模块访问。

特点:使用extern关键字时,表示变量已经在别处定义,所以不能在此处初始化。

示例

     file main.cpp:
     #include <iostream>
     using namespace std;
     extern int count;  // 声明外部变量
     int main() {
         cout << "Count: " << count << endl;
         return 0;
     }
     file other.cpp:
     int count = 10;  // 定义外部变量

5、mutable

定义:mutable存储类只能用于类的数据成员,不能用于普通变量。

特点:具有mutable性质的类的数据成员打破了类对象的const限定,允许修改类的mutable的数据成员,即便类的其它成员仍然是const只读属性。

示例

     class Example {
     private:
         mutable int count;
     public:
         Example() : count(0) {}
         void increment() const {
             count++;
         }
         int getCount() const {
             return count;
         }
     };

6、thread_local

定义:适用于命名空间内的变量、全局作用域的变量、函数内部定义的静态变量。

特点:如果使用了thread_local关键字,则在运行时不同的线程具有该变量的不同的存储位置,即各有各的副本,具有thread_local存储类的变量,必然具有static存储类性质,不管是否使用了static关键字。

示例

     #include <iostream>
     using namespace std;
     _Thread_local int counter = 0; // 每个线程独立的变量
     void increment() {
         counter++;
         printf("Counter = %d
", counter);
     }

三、FAQs

1、:什么是存储类的生命周期?

:存储类的生命周期指的是变量或函数在内存中存在的时间长度,不同的存储类有不同的生命周期,auto变量的生命周期与其所在的作用域相同,而static变量的生命周期则是整个程序运行期间。

2、:如何选择适当的存储类?

:选择适当的存储类需要考虑变量的使用场景和需求,如果变量只需要在函数内部临时使用,可以选择auto存储类,如果变量需要在多个文件之间共享,可以选择extern存储类,如果变量需要在多线程环境下保持独立性,可以选择thread_local存储类,应根据具体需求来选择合适的存储类。

0