存储类定义C ++程序中变量和/或函数的范围(可见性)和生命周期.这些说明符位于它们修改的类型之前.有以下存储类,可以在C ++程序中使用
auto
注册
静态
extern
mutable
自动存储类
自动存储类是所有局部变量的默认存储类.
{ int mount; auto int month; }
上面的例子定义了两个具有相同存储类的变量,auto只能在函数中使用,即局部变量.
寄存器存储类
寄存器存储类用于定义应存储在寄存器中的局部变量,而不是内存.这意味着变量的最大大小等于寄存器大小(通常是一个单词),并且不能对其应用一元'&'运算符(因为它没有内存位置).
{ register int miles; }
寄存器只应用于需要快速访问的变量,例如计数器.还应注意,定义"寄存器"并不意味着变量将存储在寄存器中.这意味着它可能存储在寄存器中,具体取决于硬件和实现限制.
静态存储类
静态存储类指示编译器在程序的生命周期内保留一个局部变量,而不是在每次进入和超出范围时创建和销毁它.因此,使局部变量静态允许它们在函数调用之间保持它们的值.
静态修饰符也可以应用于全局变量.完成此操作后,它会将该变量的范围限制为声明它的文件.
在C ++中,当在类数据成员上使用静态时,它只会导致一个该成员的副本将由其类的所有对象共享.
#include// Function declarationvoid func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0;}// Function definitionvoid func( void ) { static int i = 5; // local static variable i++; std::cout << "i is " << i ; std::cout << " and count is " << count << std::endl;}
编译并执行上述代码时,会产生以下结果 :
i is 6 and count is 9i is 7 and count is 8i is 8 and count is 7i is 9 and count is 6i is 10 and count is 5i is 11 and count is 4i is 12 and count is 3i is 13 and count is 2i is 14 and count is 1i is 15 and count is 0
extern存储类
extern 存储类用于提供对所有程序文件可见的全局变量的引用.当您使用'extern'时,该变量无法初始化,因为它只是将变量名称指向先前已定义的存储位置.
当您有多个文件并定义了全局变量或函数,也将在其他文件中使用,然后 extern 将在另一个文件中使用,以提供已定义变量或函数的引用.只是为了理解 extern 用于在另一个文件中声明全局变量或函数.
当有两个或更多文件共享时,最常用的是extern修饰符相同的全局变量或函数如下所述.
第一个文件:main.cpp
#includeint count ;extern void write_extern(); main() { count = 5; write_extern();}
第二档案:support.cpp
#includeextern int count;void write_extern(void) { std::cout << "Count is " << count << std::endl;}
此处, extern 关键字用于在另一个文件中声明计数.现在编译这两个文件如下 :
$ g ++ main.cpp support.cpp -o write
这将产生写可执行程序,尝试执行写并检查结果如下 :
$./write 5
可变存储类
mutable 说明符仅适用于类对象,本教程稍后将对此进行讨论.它允许对象的成员覆盖const成员函数.也就是说,可以通过const成员函数修改可变成员.