第3課 進化後的const分析

2021-10-02 20:27:21 字數 2018 閱讀 9178

本文內容取自於對狄泰學院 唐佐林老師 c++深度解析 課程的學習總結

const修改的變數是唯讀的,本質還是變數const修改的區域性變數在棧上分配空間

const修改的全域性變數在唯讀儲存區分配空間

const只在編譯期有用,在執行期無用

const

修飾的變數不是真的常量,它只是告訴

編譯器該變數不能出現在賦值符號的左邊

c語言中的const使得變數具有唯讀屬性

const將具有全域性生命週期的變數儲存於唯讀儲存區

const

不能定義真正意義上的常量!

編寫乙個c程式來嘗試修改const變數的值

通過實驗結果可以看出,c程式中被const修飾的變數值可以通過指標訪問的方式被修改。

我們再來編寫乙個一模一樣的c++程式來執行,看結果會怎麼樣

編譯進直接報錯,const int *型別不能轉換為int *型別

c++在c的基礎上對const進行了進化處理

當碰見const宣告時在符號表中放入常量

編譯過程中若發現使用常量則直接以符號表中的值替換

編譯過程中若發現下述情況則給對應的常量分配儲存空間

注意:c++編譯器雖然可能 為const常量分配空間,

但不會使用其儲存空間中的值

c語言中的const變數

c語言中的const變數是唯讀變數,會分配儲存空間

c++中的const常量
可能分配儲存空間

當const常量為全域性,並且需要在其它檔案中使用

當使用&操作符對const常量取位址

c++中的const常量類似於巨集定義
const int c = 5; 約等於 #define c 5

c++中的const常量在與巨集定義不同
const 常量是由編譯器處理

編譯器對const 常量進行型別檢查和作用域檢查

巨集定義由預處理器處理,單純的文字替換

通過乙個程式設計示例來說明c++中const常量與巨集定義的區別

#include

voidf(

)voidg(

)int

main()

;int i =0;

for(i=

0; i<

(a + b)

; i++)f

();g

();return0;

}

執行結果 :

從實驗結果可以看出,int array[a + b] = ;合法,即const int a和const int b在c++中是被當作全域性變數,可以用來定義陣列的大小,c語言中const只是唯讀變數,不能作為左值使用,故c語言中這樣定義陣列是不合法的。

#define a 3 是在void f()函式體中定義的,但在void g()中呼叫a沒有報錯,能夠正確輸出a的值,說明巨集定義只是預處理,沒有作用域限制

第3課 進化後的const分析

1 const修飾的變數具有唯讀屬性,本質還是變數,只是告訴編譯器該變數不能出現在賦值符號的左邊。2 const 修飾的區域性變數在棧上分配空間,修飾的全域性變數在唯讀儲存區分配空間。3 const 只在編譯期間有用,在執行期間無用。const 不能定義真正意義上的常量 const英文含義 4 c ...

進化後的const分析

一 c語言中的const 1.const修飾的變數是唯讀的,本質上還是變數 2.const修飾的區域性變數在棧上分配空間 3.const修飾的全域性變數在唯讀儲存區分配空間 4.const只在編譯期有用,在執行期無用 const修飾的變數不是 真正的常量,它只是告訴編譯器該變數不能出現在賦值符號的左...

C 進化後的const分析

事物的難度遠遠低於對事物的恐懼!對於const關鍵字,在c高階分析中,我們知道,const在c語言中有如下特性 const修飾的變數是唯讀的,其本質還是變數而,也就是唯讀變數 依舊可以通過別的手段修改const變數 const修飾的區域性變數在棧上分配空間 const修飾的全域性變數或靜態區域性變數...