“static const” vs “#define” vs “enum” ?
“static const”
“static const” 基本上是 static(儲存說明符)和 const(型別限定符)的組合。
static 決定變數的生命週期和可見性/可訪問性。這意味著,如果一個變數被宣告為靜態變數,它將在程式執行的整個時間內保留在記憶體中,而普通的或自動變數在函式(變數定義所在的位置)結束時會被銷燬。
const 是一個型別限定符。型別限定符用於透過型別系統表達有關值的附加資訊。當使用 const 型別限定符初始化變數時,它將不再接受值的更改。
因此,結合 static 和 const,我們可以說,當使用 static const 初始化變數時,它將保留其值直到程式執行結束,並且它也不會接受任何值的更改。
示例
#include<iostream> using namespace std; int main(){ int input = 10; static const int value = 5; input += value; cout << input; return 0; }
“#define”
預處理器命令稱為指令,以井號或雜湊符號 (#) 開頭。井號 (#) 前不應出現空格,末尾不需要分號。
預處理階段可以執行許多操作,包括:
透過 #include 指令包含其他檔案
透過 #define 指令定義符號常量和宏
透過一些預處理器指令,您還可以有條件地編譯或執行一些預處理器指令。
注意 - C++ 程式的預處理階段發生在程式編譯之前。C++ 預處理器是在編譯原始碼之前執行的程式。
您已經學習瞭如何使用 #include 預處理器指令在程式中包含所需的標標頭檔案。本討論專門針對 #define 預處理器指令。
#define 預處理器允許我們定義符號名稱和常量。例如:
#define PI 3.14159
此語句將程式中 PI 的每次出現都轉換為 3.14159。
C++ #define 示例
現在考慮一個完整的示例,其中 PI 的每次出現都將替換為 3.14159,該值由 #define 指令定義。
Input: PI 3.14159 Output: Area of Circle 314.15
示例
#include<iostream> using namespace std; #define PI 3.14159 int main() { int r = 10; float cir; cir = PI * (r * r); cout<<"Area of Circle: "<<cir<<endl; }
“enum”
enum 是使用者定義的資料型別,我們為變數指定一組值,並且變數只能取一小組可能值中的一個。我們使用 enum 關鍵字來定義列舉。
enum direction {East, West, North, South}dir;
這裡的列舉名稱是 direction,它只能取四個指定值中的一個,宣告末尾的 dir 是一個列舉變數。
讓我們來看一個簡單的例子來理解這一點
在這裡,我將值 West 賦值給列舉變數 dir,當我顯示 dir 的值時,它顯示 1。這是因為預設情況下,值按從 0 開始的遞增順序排列,這意味著 East 是 0,West 是 1,North 是 2,South 是 3。
Input: direction {East, West, North, South} dir=West Output: 1
示例
#include<iostream> using namespace std; enum direction {East, West, North, South} dir; int main(){ dir = West; cout<<dir; return 0; }
另一種宣告列舉變數的方法
正如我們在上面的例子中看到的,我已經在列舉宣告期間聲明瞭列舉變數 dir,還有一種方法可以宣告列舉變數。
示例
#include <iostream> using namespace std; enum direction {East, West, North, South}; int main() { direction dir; dir = South; cout<<dir; return 0; }
輸出
3
為什麼在 C++ 中使用 enum
現在我們瞭解了什麼是 enum 以及如何在程式中使用它們,讓我們討論一下我們為什麼要使用它們
只有當我們期望變數具有可能值集之一時才使用列舉,例如,我們有一個儲存方向的 dir 變數。由於我們有四個方向,此變數可以取四個值中的任何一個,如果我們嘗試為此變數分配另一個隨機值,則會引發編譯錯誤。這增加了編譯時檢查並避免了傳遞無效常量時發生的錯誤。
另一個經常使用它們的重要位置是 switch case 語句,其中 case 塊期望的所有值都可以在 enum 中定義。這樣,我們可以確保傳遞到 switch 括號中的 enum 變數不會取任何它不應該接受的隨機值。