C 進化後的const分析

2021-08-20 10:53:19 字數 1349 閱讀 6605

--事物的難度遠遠低於對事物的恐懼!

對於const關鍵字,在c高階分析中,我們知道,const在c語言中有如下特性:

-const修飾的變數是唯讀的,其本質還是變數而,也就是唯讀變數(依舊可以通過別的手段修改const變數)

-const修飾的區域性變數在棧上分配空間

-const修飾的全域性變數或靜態區域性變數,在唯讀儲存區分配空間    

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

在c語言中,const不能定義真正意義上的常量!

下邊通過乙個小例子先來初步感受下c與c++中,const的區別

#includeint main()

首先採用gcc編譯器來編譯,輸出結果如下:

可以看到,我們用const修飾的變數i,值已經被改了,這說明c語言中的const並不能修飾為常量。

我們現在用g++來編譯執行,輸出結果為:

從輸出看到,在c++中,const修飾的i,並不會像在c中的那樣被修改。

其實在c++中,c++是在c的基礎上對const進行了進化處理

-當碰見const宣告時,就把宣告的識別符號當做常量放入符號表中

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

-編譯過程中若對const常量使用了extern或&操作符,那麼還是會給對應的常量分配儲存空間。

注意:c++雖然可能為const常量分配空間,但是不會使用其儲存空間中的值,僅僅是為了相容c語言

上邊的*p = 5;其實是使用了給c分配的空間賦值為5,但是c時不會去使用這個分配的空間的,在c出現的地方,會以符號表中的值去替代。

c++中的const常量類似於巨集定義

-const int c = 5; ≈ #define c 5

但是實際上const常量與巨集還是有區別的

-const常量由編譯器處理

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

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

總結:-c語言中的const修飾的只是唯讀變數

-c++中的const修飾的是真正意義上的常量

-c++編譯器可能會為const常量分配空間,但是並不會去使用這個分配的空間,僅僅是為了相容c語言

-c++完全相容c語言中const的語法特性

進化後的const分析

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

第3課 進化後的const分析

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

第3課 進化後的const分析

本文內容取自於對狄泰學院 唐佐林老師 c 深度解析 課程的學習總結 const修改的變數是唯讀的,本質還是變數const修改的區域性變數在棧上分配空間 const修改的全域性變數在唯讀儲存區分配空間 const只在編譯期有用,在執行期無用 const 修飾的變數不是真的常量,它只是告訴 編譯器該變數...