C++中的儲存類



儲存類定義了 C++ 程式中變數和/或函式的作用域(可見性)和生命週期。這些說明符位於它們修飾的型別之前。以下儲存類可用於 C++ 程式

  • auto
  • register
  • static
  • extern
  • mutable

auto 儲存類

auto 儲存類是所有區域性變數的預設儲存類。

示例

以下是 auto 儲存類的示例:

{
   int mount;
   auto int month;
}

上面的示例定義了兩個具有相同儲存類的變數,auto 只能在函式內使用,即區域性變數。

register 儲存類

register 儲存類用於定義應儲存在暫存器而不是 RAM 中的區域性變數。這意味著變數的最大大小等於暫存器大小(通常是一個字),並且不能對其應用一元“&”運算子(因為它沒有記憶體位置)。

示例

以下是 register 儲存類的示例:

{
   register int  miles;
}

register 應該只用於需要快速訪問的變數,例如計數器。還應注意,定義“register”並不意味著變數將儲存在暫存器中。這意味著它可能會儲存在暫存器中,具體取決於硬體和實現限制。

static 儲存類

static 儲存類指示編譯器在程式的生命週期內保持區域性變數的存在,而不是在每次進入和退出作用域時建立和銷燬它。因此,使區域性變數為 static 允許它們在函式呼叫之間保持其值。

static 修飾符也可以應用於全域性變數。這樣做會導致該變數的作用域限制在其宣告的檔案中。

在 C++ 中,當 static 用於類資料成員時,它會導致只有一個副本由其類的所有物件共享。

示例

以下是 static 儲存類的示例:

#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 修飾符最常用於兩個或多個檔案共享相同的全域性變數或函式,如下所述。

示例

以下是 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 關鍵字用於在另一個檔案中宣告 count。現在編譯這兩個檔案,如下所示:

$g++ main.cpp support.cpp -o write

這將生成write 可執行程式,嘗試執行write 並檢查結果,如下所示:

$./write
5

mutable 儲存類

mutable 說明符僅適用於類物件,在本教程後面將討論。它允許物件的成員覆蓋 const 成員函式。也就是說,mutable 成員可以被 const 成員函式修改。

廣告