考慮這樣一段**:
for (int i = 0; i
< 200*800*700; ++i)
該迴圈的條件(i<200*700*800)是乙個表示式(expression),如果放到判斷時再求值那麼200*700*800的計算將會進行112000000次。如果編譯器在語法分析階段進行常量合併,該迴圈將會變為這樣:
for (int i = 0; i
< 112000000; ++i)
我們再來看一次沒那麼直觀的例子,本質仍然針對常量進行的常量摺疊:
const
int i = 0;
int* pi = const_cast
(&i);
// const_cast消除常量性
*pi = 5;
cout
<< "&i = "
<< &i << ", pi = "
<< pi << std::endl;
cout
<< "i = "
<< i << ", *pi = "
<< *pi << std::endl;
詭異的事情發生了:
&i = 001ef788, pi = 001ef788
i = 0, *pi = 5
可見這裡的常量(被const修飾)i
的值被放入常量表中,輸出時輸出的是常量表中對應的值。而在執行階段,它在記憶體裡存的實體也確確實實改變了,但這並未影響常量表對中對應的值。 C語言中const定義常量和巨集常量的區別
2.巨集常量 3.兩者區別 關鍵字const 定義的是變數不是常量,而是去改變乙個變數的儲存類,把該變數所佔的記憶體變為唯讀。這就是變數的值不允許改變的常變數。該常量帶有資料型別。編譯執行的時候起作用存在型別檢查。include const int a 1 const static int b vo...
c和c 中的const與常量摺疊
c中const修飾的是唯讀變數,c 中const修飾的是常量 在c c 中const在使用並無太大區別,只是c 對const更為嚴格,並且對const修飾的量進行了常量摺疊。先看如下例子,例子中不只測試c c 中const 的區別,也順便測試了const int 指標與int const指標的區別 ...
GO語言 const常量
單行常量宣告,宣告時必須指定值,且無法修改 const pi 3.14多行常量宣告,若省略賦值,則預設與上一行值相同 const a 100 b 200 c c 200 d d 200 const aa iota 0 bb bb iota 1 cc cc iota 2 dd dd iota 3 co...