左值:放在賦值符號"="的左邊.即寫權限
1、限定寫權限,將變量變成只讀
const int a=10; int const a=10;兩個定義方法都可以均表示a是一個常變量不可修改。
2、基本數據類型對於const透明
(int const *p=&a)==(const int *p=&a)
3、const修飾它的直接右邊,使其只讀
const int *p=&a;
const 直接修飾的*p,*p不可修改,但是p可以修改。
int *const p=&a;
const直接修飾的p,所以p不可以修改,*p可以修改。
4、權限可以同等或者縮小傳遞,但不能放大傳遞
int a = 10;
int b = 20;//a,b可讀可寫
const int ca = 30;//可讀
int *p1 = &a;//*p可讀可寫,a也可讀可寫,所以這種操作可以(同等操作)
const int *p2 = &a;//*p2可讀,a可讀可寫,所以這種也可以(縮小操作)
int *p3 = &ca;//這種操作錯誤,因爲ca只可以讀,而*p3可讀可寫,要是這種操作可以,那麼*p3可以修改ca,而ca 常變量,所以不可以。(放大操作)
******************
const必須要初始化
***********************************************************************************************************************************************
C++:
(第三句代碼是進行強轉,彙編時期,翻譯指令,不與編譯時期衝突,a此時沒有const,屬性可以進行修改)
C:
爲什麼相同的代碼在C++和C中的結果不一樣呢???
在C中const代表這個變量不能修改,在編譯時期只是檢查而已。
在C++中const在編譯時期就進行替換,類似於宏替換,將所有的變量都替換成數字,這是跟C中的不同點。
但是其實變量的值還是變了的
當我調試到這個位置時,a的值已經改變,但是由於在編譯期就給我們替換成了10,所以輸出來就是10了。