const物件建立之後,就不能改變其值,所以在定義時必須對其初始化。
如果利用乙個物件對const物件進行初始化,則它們可以是不是const型別沒有關係。
int i = 1;
const ci = i;//正確
int j = ci;//正確
當嘗試改變ci的值時,ci的常量特性才發揮作用
預設情況下,const物件僅在定義檔案內有效,如果需要在其他檔案中也需要使用,則需要定義成 extern const,同時在需要使用使用的檔案中用extern const宣告.
const引用
可以把引用繫結到cosnt物件上——對常量的引用,對常量的引用 不能用來 修 改 所繫結物件。
初始化和對常量的引用
引用的型別必須與其引用物件的型別一致,但是有兩種例外,第一種,就是,對常量引用初始化時,只要右邊的表示式能轉換為引用物件的型別即可。
int i = 1;
const int &r1 = i;//對const的引用可能引用乙個非const物件,但是不能通過r1改變i的值
const double & r2 = 42;//正確,可以對字面值常量進行引用
指標和const
指標是物件,所以存在常量指標(指標本身是個常量),指向常量的指標。
常量指標:指標值不能被改變,指向的物件可能被改變
指向常量的指標:不能通過指標改變物件,指標值可能被改變
const int ci = 1;
int *pi = &ci;//錯誤,pi是個普通指標
const int * cp = &ci;//正確,cp是指向常量的指標
和常量引用一樣,指向常量的指標,可能通過其它途徑改變所指向物件的值
頂層const 和 底層 const
頂層const:本身是常量
底層const: 所指的物件是 常量
乙個物件可以同時是頂層const和 底層const
int i = 0;
int *const p1 = &i;//頂層const
const int ci = 42;//頂層const
cosnt int *p2 = &ci;//底層const
const int * const p3 = p2;//既是頂層const,又是底層const
const int &r = ci;//用於宣告引用的const都是 底層const
c 11筆記 04 const修飾符
簡單明瞭。如果const出現在星號左邊,表示被指物是常量 如果出現在星號右邊,表示指標自身是常量 如果出現在星號兩邊,表示被指物和指標兩者都是常量。char greet hello char p greet greet不能變,即不能通過 p 的方式改變 但仍可通過greet 的方式改變 指標可指向別...
C 11中的noexcept修飾符
在c 11標準之前,c 在函式宣告中有exception specification 異常宣告 的功能,用來指定函式可能丟擲的異常型別。voidfunc0 throw runtime error voidfunc1 throw voidfunc2 函式func0可能丟擲runtime error型別...
C 中const修飾符
const只對它左邊的東西起作用 唯一的例外就是const本身就是最左邊的修飾符,那麼它才會對右邊的東西起作用。指標常量 關鍵字順序為 const 和中文順序一致 例如 int const a,表示指標a是乙個常量,初始化後不可更改 永遠指向某個物件 但是指向的物件的值可以修改,如 a 10 常量指...