一種改變const值的方式是使用const_cast型別轉換符,將const變數轉換為乙個該變數的引用,通過這個引用去改變值,這種方法的實質就是用位址改變記憶體的值。如下例項:
structsa;
const sa sa;
cout << sa.i << endl;
sa &sb = const_cast(sa);
sb.i = 11;
cout << sa.i << endl;
上述這種方式中物件sa是儲存在記憶體中的,並且這個內存在系統中是可更改的,所以我們 可以利用上述這種方式來做改變。
考慮下面的例項:
const
inti = 0;
int&b =
const_cast
<
int&>(i);
b = 10;
cout << i << endl;
cout << b << endl;
結果將不如人所料,i輸出的值還是0,b輸出的值是10.這是什麼原因呢?這主要是因為c++編譯器中const的實現機制的問題。在c++中,const會被看成是乙個常量,所以像數值,字串這類的值,編譯器都會將其放入文字常量區,這也是python中的處理方式。當宣告乙個引用型別的b時,編譯器為他在記憶體中(棧,不是文字常量區)分配空間,因此是可以改變的。那麼我們怎麼改變i的值呢?想辦法獲取此時0在文字常量區的位址,將其改變會不會是一種方式呢?
C語言const 禁止修改變數的值
有時候我們希望定義這樣一種變數,它的值不能被改變,在整個作用域中都保持固定。例如,用乙個變數來表示班級的最大人數,或者表示緩衝區的大小。為了滿足這一要求,可以使用const關鍵字對變數加以限定 const int maxnum 100 班級的最大人數 這樣 maxnum 的值就不能被修改了,任何對 ...
C語言const 禁止修改變數的值
有時候我們希望定義這樣一種變數,它的值不能被改變,在整個作用域中都保持固定。例如,用乙個變數來表示班級的最大人數,或者表示緩衝區的大小。為了滿足這一要求,可以使用const關鍵字對變數加以限定 const int maxnum 100 班級的最大人數 這樣 maxnum 的值就不能被修改了,任何對 ...
const 的定值判斷
指標指向及其指向變數的值的變化 const在 的左邊,則指標指向的變數的值不可直接通過指標改變 可以通過其他途徑改變 在 的右邊,則指標的指向不可變。簡記為 左定值,右定向 1 指標指向的變數的值不能變,指向可變 int x 1 int y 2 const int px x int const px...