2009年4月5日 星期日

C/C++的Const(上)

一般說到const 只會想到常數

也就是類似 const int a;

但是const在c/c++裡面 扮演了一個小兵立大功的角色

const用到函數、類別、指標時 他會變成一個非常強大的修飾子

但一方面常常有感 我學了很多語言 const的神卻只在c/c++看的到

java或C#以及ActionScript、PHP等弱型別語言他經常無用武之地

c/c++雖然強大也不免感慨,他跟目前主流商用程式語言上的差別

也罷 自少c/c++大概可以在戰幾十年

先來談談指標上 const的用法


const int* i; (1)
int const* i; (2)
int* const i; (3)
int* i; (4)
const int*const i; (5)

(4)個是原生型態 就是都不加的情況,這時候指標i所指的位址幾及該位址內容是可改的
(1)跟(2)兩個是一模一樣的東西 主要判斷方式是const再星號左邊,代表的是指標i指向的內容為常數不可改,但是指向位置可改
也就是

*i=3; //X

像這樣從新指派內容是不可以的,但是

i=new int; //O

這是可行的,可以從新指向一個新的地方

而(3)則是代表指標i所指的內容可改,但是指向位置不可改,判斷方法是const在星號右邊
此時
i=new int;\\X
從新指向另一個位置是不可行,但是
*i=100;\\O
從新更改該位址內容卻是可以

置於(4)則是指向內容跟指向位置都不可改,就像是宣告一般常數一樣

const i;


附帶一提,我們常用的陣列,其實就是宣告一個位置不可改的指標

int arr[10];

就等效於

int* const arr=new int[10];


今天到此為止

const在函數及類別的用法 下回再說吧

沒有留言: