C++ 中 const 用法豐富。若不使用常引用/指標,須用 const_cast<> 轉換。指向 char 的常指標常用於表示字串(如 Windows LPCSTR 即 const char*)。
最基本用法,替代 C 巨集。宣告時必須初始化,類別資料成員在建構函式初始化列表初始化。
const int a = 999; // 替代巨集
extern const int c; // 外部定義無需初始化
int const d = 0; // 與 const int 等價
const long e = 0; // 同理適用 char、long、類別
對常量的引用/指標必須為常引用/常指標(不可修改所指內容)。否則需 const_cast<> 轉換。const char* 常用於字串字面值(內容不可改)。
const int& g = a; // a 內容不可改,引用也為 const
int& i = const_cast<int&>(a); // 移除 const
const int* k = &a; // 指向常量的指標
int const* l = &a; // 等價寫法
const char* n = "string"; // 字串字面值不可修改
char* o = "string2"; // 危險:字串字面值實為常量
修飾物件表示其資料成員皆為常量,只能呼叫常成員函式。綜合 1-3:const 表示所修飾記憶體區域被鎖定,不可修改。常引用常用於函式傳參(避免拷貝建構開銷、保護參數不被修改)。
const char* vs char* constconst char*(或 char const*):常指標,指向內容不可修改,用於字串。char* const:指標本身不可修改(不可指向別處),類似引用。const char* const:指向固定且內容不可修改。關鍵在 const 相對於 * 的位置:前面修飾指向內容,後面修飾指標本身。