const 是乙個關鍵字修飾符,用於修飾常量,說明變數是不可改變的常量,一經定義賦值不可改變。
const 修飾的變數具有以下特點:
const 常量只能在宣告的時候賦值。
如果乙個類內的成員變數被宣告為const 常量,則該成員變數必須使用初始化列表的方式進行初始化。
const 修飾指標變數是規則有點特別:
如果const 在*的右邊,則const修飾的指標變數。
int b =
8; int
*const a =
&b;//說明修飾的是int型別的指標變數a,指標變數a的值不被改變,但是指標變數a所指向的記憶體中的值是可以改變的
//也就是可以對指標變數a所指向的記憶體進行賦值
*a =10;
//這是b的值變成了10,*a的值是10,他們代表同乙個記憶體空間
如果const在*的左邊,則說明const修飾的是指標所指向的記憶體空間,這個記憶體空間是常量不能被改變的。
int b =8;
const
int*a =
&b;//指標變數a的值可以被改變,也就是指標變數a可以別重新賦值,但是目前指標變數a所指向的記憶體空間不能被賦予新的值,不能通過指正變數a改變這個記憶體空間的值,這個記憶體空間的值課通過變數b來重新賦值改變
constexpr 表示常量表示式,所謂常量表示式是指值不會發生改變的表示式,並且在編譯的過程中能夠得到計算結果的表示式。我們知道的常量表達是有哪些?const 物件屬於常量表示式,數字、字元等字面值屬於常量表示式。
constexpr 是c++ 11 新引入的關鍵字,他規定,允許將變數宣告為constexpr 以便由編譯器來驗證變數的值是否是乙個常量表示式。申明為constexpr 的變數一定是乙個常量,而且必須用常量表示式進行初始化,否則無法編譯通過。
const
int b =10;
int c =8;
constexpr int exc = c;
//無法通過編譯,因為c是變數,不是常量表示式
constexpr int a = b;
//ok
如果constexpr 修飾指標,那麼constexpr 修飾作用只對指標有效,而對指標所指向的記憶體空間無效。
constexpr int b =10;
int c =5;
constexpr int
*a =
&b;// a是常量指標,指向整形常量b
constexpr int
*d =
&c;// d是常量指標,指向整數c
C 中頂層const和底層const
指標本身是乙個物件,由於,指標實際相應著記憶體單元的一段儲存空間,然而,指標所指向的也是乙個資料物件,因此,指標是乙個常量與指標所指向的是乙個常量是兩個全然不同的概念,頂層 const 表示的是 指標本身是乙個常量,底層 const 表示的是 指標所指的物件是乙個常量,更普通情況下,頂層 const...
C 中頂層const和底層const
頂層const表示指標本身是個常量,底層const表示指標所指的物件是乙個常量。int i 0 int const p1 i 不能改變p的值,p是乙個指標,所以p是乙個頂層const const int p2 i 表示不能改變指標所指i的值,所以是乙個底層const const的頂層和底層不只是限定...
c 中const和引用
c 和c語言裡面的const 1 在c語言裡面的const修飾的量是乙個常變數,不能作為左值,但是可以通過洩露指標和引用去修改它,int a 10 int p a 洩露了常量的引用。但是 int a 10 const int p a 是正確的。因為a本來就是普通的變數,而通過常量 p不能改變它,但a...