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函數,纔是正確聲明。