c 常量和常量表示式

2021-09-25 20:27:25 字數 1349 閱讀 1427

const,預設情況下僅在檔案內有效

const int i(12);

const引用:對常量的引用不能被用作修改它所繫結的物件

const int ci(5);

const int &rci(ci);

rci = 90;//錯誤 不能修改

允許常量引用繫結到非常量的物件、字面值或表示式上

int i = 20;

const int &ri(20);

const int &ri3(i + ri);

常量引用僅對引用可參與的操作作出了限定,對於引用的物件本身未做限定

int i(10);

const int &c(i);

i = 90;//i不是常量,可以改變值

c = 20;//錯誤,c是乙個常量引用,const限定了c為常量不能修改,i的修改與c的限定無關。

cout << c << endl;//值為90

//指標和const

int iv(10);

int iv1(23);

const int * pci1(&iv);//指向常量的指標,限定了該指標的操作,pci1的值可以改變,pcil指向的值不能變

pci1 = &iv1;

iv = 30;

int * const pci2(&iv);//常量指標,把指標本身定位常量,pci2的值不能改變,pci2指向的值可以改變

*pci2 = 90;

cout << *pci1 << endl;//23

cout << *pci2 << endl;//90

頂層和底層

頂層:表示指標本身是個常量

底層:指標所指的物件是常量

小技巧:const int * p: const修飾的是*p,也就是*p不能變。

int * const p: const修飾的是p,也就是p不能變。

字面值和constexpr

常量表示式:字面值是常量表示式,用常量表示式初始化的const物件也是常量表示式

const int ci = 20;//ci是常量表示式

const int cii = ci + 90;//cii是常量表示式

int iv = 30;//iv不是常量表示式

宣告為constexpr的變數一定是常量,而且必須用常量表示式初始化

constexpr int cif = 23;

constexpr宣告的指標,只對指標有效,與指標指向的物件無關

constexpr int cvi(12);//必須定義到函式體外部才能被cip使用

constexpr const int * cip(&cvi);

cout << *cip << endl;

常量表示式

字面值 是乙個不能改變的值,如數字 字元 字串等。單引號內的是字元字面值,雙引號內的是字串字面值。字面值型別 literal type 算數型別 引用和指標等。常量表示式 const experssion 是指 1 值不會改變 並且 2 在編譯過程就能得到計算結果的表示式。字面量屬於常量表示式,用常...

常量表示式

為了使函式獲取編譯時計算的能力,你必須指定constexpr關鍵字到這個函式。constexpr int multiply int x,int y 將在編譯時計算 const int val multiply 10,10 除了編譯時計算的效能優化,constexpr的另外乙個優勢是,它允許函式被應用...

C 常量表示式和constexpr

常量表示式是指不會改變且在編譯過程中就能得到計算結果的表示式,比如下面的10,value1 1,value1 value2都是常量表示式。int main constexpr和const很像,有如下區別 int main int main int main constexpr函式指能用於常量表示式的...