c和c 中的const與常量摺疊

2021-10-01 03:18:33 字數 760 閱讀 7660

c中const修飾的是唯讀變數,c++中const修飾的是常量

在c/c++中const在使用並無太大區別,只是c++對const更為嚴格,並且對const修飾的量進行了常量摺疊

先看如下例子,例子中不只測試c/c++中const 的區別,也順便測試了const int *指標與int * const指標的區別(可忽略p1)。

c**

#include

intmain

(void

)

c++

#include

intmain

(void

)

由上面可以看到c++中也可以像c一樣通過用非const型別的指標指向const型別來間接修改const數值(p2),但輸出對指向a的p2解引用和a的值卻不相同,說明我們雖然修改了a的儲存空間中的值,但卻沒有修改a的」值「。這就是c++的常量摺疊,即對const常量位址空間中的值的修改並不會影響到常量本身的值。c++在程式一開始中會將const常量放到符號表中,並不給其分配記憶體。編譯器直接進行替換優化。直到程式中需要使用a的記憶體時,編譯器迫不得已分配一塊記憶體空間給a,但之後a的值仍從符號表中讀取,不管a的儲存空間中的值如何變化,a的值始終不會受到影響。還有乙個可以有力說明c++中的const修飾值為常量的例子就是c++中const修飾的int值可以在陣列的[ ]中,如 int arr[a];, 在c語言中不允許這樣做。

c 中的常量摺疊

先來看乙個例子 include int main 這就是編譯器的 常量摺疊 在作怪啦!常量摺疊 就是在編譯器進行語法分析的時候,將常量表示式計算求值,並用求得的值來替換表示式,放入常量表。可以算作一種編譯優化。編譯器在優化的過程中,會把碰見的const全部以內容替換掉 跟巨集替換似的 define ...

C 常量摺疊

c 中const 常量用法 說明 c語言中const 常量可以很容易地被改變 include include void main c 編譯器進行語法分析的時候,將常量表示式計算求值,並用求得的值來替換表示式,放入常量表,是 因為編譯器在優化的過程中,會把碰見的const全部以內容替換掉 跟巨集替換類...

C 的常量摺疊(三)

背景知識 符號表是一種用於語言翻譯器中的資料結構。在符號表中,程式源 中的每個識別符號都和它的宣告或使用資訊繫結在一起,比如其資料型別 作用域以及記憶體位址。符號表在編譯程式工作的過程中不斷收集 記錄和使用源程式中一些語法符號的型別和特徵等相關資訊。這些資訊一般以 形式儲存於系統中。如常數表 變數名...