--事物的難度遠遠低於對事物的恐懼!
對於const關鍵字,在c高階分析中,我們知道,const在c語言中有如下特性:
-const修飾的變數是唯讀的,其本質還是變數而,也就是唯讀變數(依舊可以通過別的手段修改const變數)
-const修飾的區域性變數在棧上分配空間
-const修飾的全域性變數或靜態區域性變數,在唯讀儲存區分配空間
-const只在編譯期有用,在執行期無用
在c語言中,const不能定義真正意義上的常量!
下邊通過乙個小例子先來初步感受下c與c++中,const的區別
首先採用gcc編譯器來編譯,輸出結果如下:#includeint main()
可以看到,我們用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 修飾的變數不是真的常量,它只是告訴 編譯器該變數...