以下我們先不考慮類別或結構,而是用在一般函式內的情境
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) - 指標篇
沒有留言:
張貼留言