C++程序存储类定义的范围(可视性)和变量和/或函数的生命周期内。这些说明之前,可以修改它们类型。有下列存储类型可以在C++程序中使用
-
auto
-
register
-
static
-
extern
-
mutable
自动(auto)存储类
自动存储类是默认的存储类别在所有局部变量。
{ int mount; auto int month; }
上面的例子中定义了两个变量使用相同存储类,auto只能在函数中使用,也就是说,使用在局部变量。
寄存器(register)存储类
寄存器存储用于定义应当被存储在寄存器中,而不是RAM中的局部变量。这意味着该变量等于寄存器大小(通常为一个字)的最大尺寸,并且可以不具有适用于它的一元'&'操作(因为它不具有一个存储器位置)。
{ register int miles; }
寄存器应只用于需要快速访问诸如计数器变量。还应当指出的是界定“注册”并不意味着该变量将被存储在一个寄存器中。这意味着,它可能被存储在寄存器依赖于硬件和执行的限制。
静态(static)存储类
静态存储类指示编译器在程序而不是每次进入创建,在超出范围时销毁它,以保持局部变量存在。因此,使得局部变量静态使它们能够保持函数之间调用的值。
静态修辞符也可以应用于全局变量。当这样做时,它会导致该变量的范围被限制在其所声明的文件。
在C++中,静态时使用一个类的数据成员,它会导致该成员只有一个拷贝到其类的所有对象共享。
#include <iostream> // Function declaration void func(void); static int count = 10; /* Global variable */ main() { while(count--) { func(); } return 0; } // Function definition void 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 9 i is 7 and count is 8 i is 8 and count is 7 i is 9 and count is 6 i is 10 and count is 5 i is 11 and count is 4 i is 12 and count is 3 i is 13 and count is 2 i is 14 and count is 1 i is 15 and count is 0
extern存储类
extern存储类是用来给是可见的所有程序文件的全局变量的引用。当使用“extern”的变量不能被初始化为它所做的是先前已定义的存储位置指向变量名。
当有多个文件,并可以定义一个全局变量或功能,这将在其他文件中也可以使用,然后extern将被用于在另一个文件中,得到定义的变量或函数的参考。只是理解extern被用来声明在另一个文件中的全局变量或函数。
extern修饰符是最常用的,当存在两个或多个文件,如下所述共用同一全局变量或函数。
第一个文件: main.cpp
#include <iostream> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
第二个文件: support.cpp
#include <iostream> extern int count; void write_extern(void) { std::cout << "Count is " << count << std::endl; }
这里,extern关键字被用于声明计数在另一文件中。现在如下编译这两个文件:
$g++ main.cpp support.cpp -o write
这将产生编写的可执行程序,尝试执行写操作和检查结果如下:
$./write 5
易变(mutable)存储类型
只有易变(mutable)指示符适用于类对象,这是在本教程后面讨论。它允许一个对象的一个成员来覆盖常量性。也就是说,一个可变的成员可以通过一个const成员函数修改。