2013年11月9日 星期六

const 的使用 (1) - 基礎篇

以下我們先不考慮類別或結構,而是用在一般函式內的情境


const 所修飾的變數會具有『唯讀性』,但這個唯讀性是在『初始化』之後才保證,也就是在『初始化』時是可以指定值的:

const int a = 3;  // [編譯成功] 初始化
a = 5;            // [編譯失敗] 賦值運算
const 型態的變數無法被放於賦值運算子 (=) 左方。

因為唯一可以設定 const 變數值的時間點是在『初始化』時,所以 const 變數初始化時一定要指定值:

const int b = 3; // [編譯成功]
const int c;     // [編譯失敗] 沒有在初始化時給與 b 變數值

綜合上面所說,以下程式碼變數定義的部份都是合法的,因為放在等號右方的變數無論是否是 const 都只會被讀取 (唯讀性),而放在左方的變數無論是否是 const 都可以在初始化時被指定值:

int d = 3;                
int e = d;            // [編譯成功] (int) = (int)
const int f = d;      // [編譯成功] (const int) = (int)
int g = f;            // [編譯成功] (int) = (const int)
const int h = f;      // [編譯成功] (const int) = (const int)

但是在使用賦值運算子 (=) 時,左方不能放 const 變數:

e = a; // [編譯成功] 
f = a; // [編譯失敗] 因為 f 是 const 
g = a; // [編譯成功] 
h = a; // [編譯失敗] 因為 h 是 const

[小結] const 變數在初始化後就不能再改變內容,但是在初始化時可以且必需指定內容!


下一篇:const 的使用 (2) - 指標篇

沒有留言: