C++存儲類彆
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成員函數修改。