最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C++ const限定符

2023-03-16 22:15 作者:S-a-i_  | 我要投稿

有一些值我們不希望他的值發(fā)生改變,那么可以用const對其進行修飾。

不可修改常量的值

因為const對象一旦創(chuàng)建就無法修改,因此const對象必須初始化。與改變const對象值無關(guān)的操作不會受到影響(例如你可以將eternity賦值給其他數(shù)


默認情況下const對象僅在文件內(nèi)有效,編譯器在編譯過程中,將用到該對象的地方都替換成對應(yīng)的值,所以對象的文件必須可以訪問到他的初始值,如果不在同一文件的時候,我們無法直接訪問這個對象,這樣可以避免同一變量的重復定義。在多個文件中重名的const對象其實是在不同文件都獨立定義了變量而已。

如果我們想要const對象實現(xiàn)文件的共享,可以使用extern關(guān)鍵字,這樣只需一次定義就能在多個文件使用。

跨文件訪問eternity變量


const的引用

可以把引用綁定到const對象上,我們稱為對常量的引用,同時對常量的引用不能用作修改他所綁定的對象。

因為不允許對常量進行修改,所以我們聲明非常量引用去引用常量是無意義的操作,c++規(guī)定他是不正確的。


初始化和對const的引用

在引用我們提過,引用類型必須和所引用的對象類型一致,但是有兩個例外,第一種例外就是在初始化常量引用時允許用任意表達式作為初始值,只要該表達式的結(jié)果能轉(zhuǎn)換成引用的類型即可。

這種也是可以運行的

出現(xiàn)這種情況是因為,編譯器為了確保ri綁定一個整型數(shù),會生成一個臨時的int型常量用來存放dval的值,然后再將這個常量賦值給ri。

注意:但如果ri是非常量引用,就允許對ri進行賦值,這樣會改變ri所引用的對象的值,這時候綁定的對象是一個臨時量而不是dval,那么這條語句就失去了意義,因為對臨時量操作沒有意義,所以c++視為非法定義。


對const的引用可能引用一個非const的對象

常量引用r2綁定i是合法的,即使i不是常量,但是通過r2修改i是非法的,但是可以通過其他的途徑修改i的值從而修改r2。


指針和const

指針也可以和const進行組合,指向指針的常量不能用于改變其所指對象的值。想存放常量對象的地址,必須用常量指針。

指針中我們提到,指針的類型必須和所指對象的類型一致,但是也有兩個例外,第一種就是指允許令一個指向常量的指針指向非常量對象。

和常量的引用一樣,指向常量的指針僅僅是不呢通過該指針來改變對象的值,而該對象可以隨意改變。


const 指針

指針是一個對象,所以可以把指針定義為常量,同時常量指針必須初始化,而且初始化后他的值不能改變,把*放在const關(guān)鍵字之前來說明他是一個常量指針,同時說明不能變的是指針的值而不是指向那個對象的值

我們說過了解一個對象的含義,可以從右向左一次閱讀,所以curErr首先是一個常量,然后是一個指針,所以他是一個常量指針,同時它指向int對象,pip同理可以推斷。

指針是一個常量意味著他不能改變所指的對象,但不意味著他不能通過指針修改對象的值,這完全取決于所指對象的類型,例如pip是一個指向常量的常量指針,所以pip既不能改變所指的對象,也不能改變所指對象的值,但是curErr指向一個非常量整數(shù),那么可以通過curErr修改errNumb的值。(第一次可能有些難以理解但是通過對上面代碼的驗證,你應(yīng)該會有所收獲。。


頂層const

我們用頂層const表示指針本身是個常量,用底層const表示指針所指的對象是一個常量

更一般的頂層const可以表示任意的對象是常量,這一點對任何數(shù)據(jù)類型都適用,底層const則與指針和引用等復合類型的基本類型部分有關(guān)。

執(zhí)行對象的拷貝操作時,常量是頂層const還是底層const區(qū)別明顯,其中頂層const不受什么影響。

底層const的限制不能忽視,當執(zhí)行對象的拷貝操作時,拷入和拷出的對象必須具有相同的底層const資格,或者兩個對象的類型可以相互轉(zhuǎn)換(非常量可以轉(zhuǎn)換成常量,反之不行)。

p3綁定的是一個常量,那么我們不能把p3去初始化p,因為p是一個非常量。其他的還是相對來說比較好理解的。


C++ const限定符的評論 (共 條)

分享到微博請遵守國家法律
孝昌县| 安吉县| 宣化县| 张家港市| 上高县| 汉寿县| 静海县| 安国市| 罗平县| 水城县| 马尔康县| 高要市| 巩义市| 凯里市| 临高县| 平湖市| 桦甸市| 乌苏市| 菏泽市| 潞城市| 富顺县| 正安县| 长阳| 彰武县| 芦山县| 永泰县| 成都市| 余干县| 姜堰市| 鄱阳县| 汾西县| 高碑店市| 镇江市| 盈江县| 略阳县| 措勤县| 武定县| 玉林市| 梁山县| 龙游县| 铜梁县|