C 中的 const 型別變數

2021-09-07 13:21:05 字數 1828 閱讀 2571

之前總感覺c/c++中有const 限定的變數是個很頭痛的問題,一會兒能夠變。一會兒不能夠變,一會兒把const賦給nonconst,一會兒又把nonconst賦給const,頭都被它搞大了。今天剛好把《c++ primer》中的相關部分又讀了一遍,所以就把相關的內容寫出來總結一下啦!

首先,我們能夠想想為什麼要設計const變數這樣的東西,只是就是想有個常量嘛!所以對const型別變數進行操作的核心原則就是不能改變該變數的值。其它操作的話。const還是不const影響事實上不大。

然後我們能夠想到的是,既然在程式執行過程中。不能改變const變數的值,那麼我們在對該變數進行定義的時候就必須對它進行初始化。

對於像int,double這種普通變數來說。初始化一般有例如以下三種方式:

const int i = fun(); //利用函式返回值初始化

const int j = 42;//字面值

const int k = i;//其它變數

這裡我們值得注意的是第一種和第三種的賦值方式。

我們可能會有這種疑問,萬一i的型別或者fun函式的返回值的型別不是const int型別的怎麼辦呢?這時候我們就能夠想想前面提到過的那個原則了。

因為賦值僅僅是將乙個變數的值賦給另外乙個。從此之後兩者就基本上每什麼關係了。

所以不會對原來const型別變數的值產生影響。

所以賦值操作全然能夠無視等號兩邊的變數型別。

普通型別變數的const相關問題還是非常easy的,以下就再來講講reference(引用)和pointer(指標)的相關問題。我們都知道引用型別也是必需要初始化的,而且在初始化之後不能再將該引用指向其它的變數。

這點與指標有非常大的不同。所以我們全然能夠覺得引用本身就是const的,由於它自己的值是不能改變的。

如今我們有以下四個賦值語句:

int       j

const int i;

const int &r1 = i;

int &r2 = j;

const int &r3 = j;

int &r4 = i;

非常明顯,前面兩條的賦值語句是不會有不論什麼問題的,由於等號兩變的變數型別是全然一樣的。其實我們全然能夠將乙個const型別的引用指向乙個nonconst型別的變數。就像第三個等式一樣。由於我們僅僅要保證變數的值不能通過r3進行改變就能夠了。至於實際上j的值變不變是不在r3的管轄範圍之內的,或者說即使變了也無所謂,j本來就是nonconst型別的。可是,假設反過來將乙個noncosnt型別的引用指向乙個const型別的變數就不行了,由於你此時能夠同過r4去改變乙個const型別變數的值。

最後我們來看看指標型別的const問題。例如以下所看到的,對於乙個指標變數來說。const通常會存在在兩個位置:

int        a;

const int *p = &a;

int *const q = &a;

對於第一種型別。我們能夠和對引用的操作做乙個模擬,事實上是幾乎相同的。那麼對於第二中宣告怎麼解讀呢?正如《c++ primer》中所說的那樣,我們能夠從變數開始從右往左讀,q前面首先是const。

所以q自己的值是不變的。

再往做是 int*,因此q就是乙個指向int型別的const變數。由於q本身是const的,所以它的值不能改變,始終指向變數a。

總之。說究竟還是開頭說過的那句話,const型別變數的核心原則是它的值不能改變。僅僅要以此進行推斷。無論是references to const 。pointers to const,consts pointer,還是const賦值給nonconst,nonconst賦值給const,我想都不是問題啦!

C 型別中的const

常型別是指使用型別修飾符const說明的型別,常型別的變數或物件的值是不能被更新的。因此,定義或說明常型別時必須進行初始化。一般常量和物件常量 1.一般常量 一般常量是指簡單型別的常量。這種常量在定義時,修飾符const可以用在型別說明符前,也可以用在型別說明符後。如 int const x 2 或...

C 類的const型別成員變數

includeusing namespace std class myclass 只能在構造函式引數行中對const型別成員變數初始化 不能在建構函式中初始化const型別成員變數 myclass類的建構函式myclass 的輸入引數必須包含 要給const成員變數const varible初始化的...

C 中const變數的修改

今天偶然在群裡看到這樣乙個問題 include int main 求輸出結果,只要掌握const變數的一些知識應該會得出答案a 10,p 20,但是這個題還有價值可究,如為什麼在偵錯程式中執行完後 a 20,p 20呢?如圖,為此群裡有個大神找到了這樣一篇文章 簡單介紹一下const變數,const...