const
int a = 10;
int &b = const_cast
(a);
b = 20
cout
<< a << " "
<< b << endl;
輸出為10 20
原因如下:
c++常量優化策略
a為const在編譯階段由於編譯器優化策略,會直接將上下文中出現a的地方替換掉。因而編譯結束時實際
語句相當於這樣:
cout
<< 10
<< " "
<< b << endl;
如此一來,執行期間修雖然通過a的引用b修改了a的值,實際上只會影響b的值。而a在編譯階段其在上下文中已經被替換,等同於巨集。
如果要強制a可以修改,則需要告訴編譯器不做優化,即新增volatile關鍵字
volatile
const
int a = 10;
則編譯器不做優化。
輸出為20 20
關於C 中的常量const
一 為什麼會有const,它有什麼用?加了const的變數只可讀不可寫。如 指標常常是邊讀邊移動,而不是邊寫邊移動,許多函式引數是唯讀不寫的。一 const的不同位置有什麼區別?char constcp 到char的const指標 charconst pc1 到const char的指標 const...
C 常量const簡單總結
初學c 簡單總結一下,又不對的地方希望大神指正 1.物件為常量,物件不可變,被指向的指標為常量 const double minwage 1.2343 物件一旦確定,不能改變,不能對其進行賦值,定義的時候就要把值賦好 const double pc minwage 指標位址為常量,指向minwage...
const 常量與 define常量的區別
c 中的常量可以使用const定義,也可以使用 define巨集定義的方式 二者區別如下 區別 1.const定義的常量有自己的資料型別,編譯器可以對其進行嚴格的型別檢查 但是define定義的巨集常量沒有資料型別,執行時只會對其進行字元替換,不會進行型別檢查 2.const定義的常量,在程式執行時...