const

pointer to const:指向常量的指針(被指向的對象是常量)c++

const pointer:常量指針(指針自己是常量)函數

 

     [對被指向對象的修飾] * [指針自己的修飾]spa

====================================================
指針

指向常量的指針:被指向的對象是常量,修飾的是被指向的對象。c++11

不能用於修改其所指對象的值(被指向的對象是常量)。對象

const int s32val = 5;//常量

const int *pint = &s32val;//const在*前,那麼說明被指向的對象是const int型。*pint是不能改變。(pint是能夠改變的,可是改變沒有意義。)

 s32val是常量,pint是指向常量的指針。blog

 

例外:容許一個指向常量的指針  指向  一個很是量對象。get

指向常量的指針也沒有規定其所指的對象必須是一個常量。只是規定不能經過該指針改變指向對象的值。it

 

------------------------------------------------------------編譯

常量指針:指針自己是常量,指針不能改變。和常量定義意義,必須初始化

int x = 10;

int *const pint = &x;//const在*後面,修飾pint,因此pint是常量,不能改變,可是*pint是能夠改變的。

 能夠*pint = 12;這樣的方式去修改,可是不能pint++,這類操做。

 

------------------------------------------------------------

指向常量的常量指針

 

const int *const pint = &x;

 

 

==========

top-level const:指針自己是常量(*右邊)

low-level const:指向的對象是常量(左邊*)

 

記憶方法,尊右爲頂。

 

==========

c++11的新規定:

constexpr類型。

常量表達式:不會改變而且在編譯過程就獲得計算結果的表達式。

 

const int max=30;

const int mmax = max+1;

是常量表達式。

 

int unstat = 11;

int getval = val();

不是常量表達式,unstat是普通int類型,val()不是在編譯階段就能肯定的值。

 

用constexpr驗證:

constexpr int mf = 20;

constexpr int limit = mf+1;

constexpr int sz = getval();只有getval是一個constexpr函數,纔是正確聲明。

相關文章
相關標籤/搜索