const與static都有靜態(tài)的含義,當聲明一個變量在其前加寫const或static,它會將值一直保持下去。
但const實際實際上聲明了一個完全靜態(tài)的常量,除了在聲明時可以給它賦值一次,在之后的任何代碼中都不能再對它進行賦值。所以在聲明const常量時,必須對其賦值,否則這個常量將沒有任何意義。當然,const是左結合的,所以在用到指針時,要注意它只使得右側緊挨著的量成為靜態(tài)。比如int const *a 變量值是靜態(tài)的,但地址是可變的,反過來,int *const a地址是靜態(tài)的,但變量值是可變的。
const用于函數(shù)也是類似的。
而static的特點就是,它可變。比如有static int a = 2;,這個值在以后的代碼中可以再次賦值。所以說static全局靜態(tài)變量不必在聲明時就一定初始化。那么static的意義何在呢?其實這個全局靜態(tài)的意義在于它的時效性。通常來說,一個變量在函數(shù)或者一些語句當中,一旦運行結束就會被系統(tǒng)干掉,這樣這段代碼在第二次運行時變量的值會被重新初始化。而如果加了關鍵字static,則這個變量在之后不會被重新建立,而是繼續(xù)之前的值和地址。
但const實際實際上聲明了一個完全靜態(tài)的常量,除了在聲明時可以給它賦值一次,在之后的任何代碼中都不能再對它進行賦值。所以在聲明const常量時,必須對其賦值,否則這個常量將沒有任何意義。當然,const是左結合的,所以在用到指針時,要注意它只使得右側緊挨著的量成為靜態(tài)。比如int const *a 變量值是靜態(tài)的,但地址是可變的,反過來,int *const a地址是靜態(tài)的,但變量值是可變的。
const用于函數(shù)也是類似的。
而static的特點就是,它可變。比如有static int a = 2;,這個值在以后的代碼中可以再次賦值。所以說static全局靜態(tài)變量不必在聲明時就一定初始化。那么static的意義何在呢?其實這個全局靜態(tài)的意義在于它的時效性。通常來說,一個變量在函數(shù)或者一些語句當中,一旦運行結束就會被系統(tǒng)干掉,這樣這段代碼在第二次運行時變量的值會被重新初始化。而如果加了關鍵字static,則這個變量在之后不會被重新建立,而是繼續(xù)之前的值和地址。