常量摺疊解析

2021-10-07 09:53:03 字數 899 閱讀 5357

#include

using

namespace std;

intmain()

test的位址為:009afa44 test的值為:10

p的位址為: 009afa44 p的值為:20

int

main

(void);

const tt s =

; cout <<

"[s]:"

<< s.a <<

","

tt *result =

const_cast

>

(&s)

; result-

>a =

10;

result-

>b =20;

cout <<

"[s]:"

<< s.a <<

","

cout <<

"[r]:"

<< result-

>a <<

","<>b << endl;

//輸出 10,20

getchar()

;return0;

}

[s]:1,2

[s]:10,20

[r]: 10,20

對於常量摺疊這種編譯器預處理,只對內建型別有效,對於自定義型別就沒有效果。

#include

using

namespace std;

intmain()

i的位址是:003af808 i的值是:10

C 常量摺疊

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

c 中的常量摺疊

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

C 的常量摺疊(三)

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