C中的const和C++中的const

左值:放在賦值符號"="的左邊.即寫權限

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了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章