針對const_cast,太多人在用同乙個示例問同乙個問題:
void main()
最終輸出的a,為何是3而不是5?
c++對用const定義的常數變數,不是靠位址空間中的內容來取數的,而是靠儲存在符號表中的索引來取數的,因此常數變數a無論什麼情況下使用都是常數3。
事實上,變數a位址空間中的內容確實是5,但即使你*(&a)來取數仍是3。你可以這樣來取變數a位址空間中的內容:
const int *d = &a;
printf("%d\n", *d);
或 int d = const_cast(&a);
printf("%d\n", *(int *)d);
此時輸出的結果是5。
上述問題都是針對單變數常數而言的,對於結構或類,const_cast的使用與你的直觀理解是無出入的。
c++提供了去除const或volatile屬性的const_cast型別轉換,使你可以對一常數變數進行修改,問題是你的設計為什麼會導致非要對一常數變數進行修改呢?
c++的程式設計準則:const或volatile屬性,禁止在指標或引用的型別轉換中移除。
C const cast的簡單理解
前言 const cast是我比較頭疼的乙個知識點,最近查閱了很多資料,也翻看了很多他人的部落格,故在此將自己目前學習到的有關const cast知識做乙個簡單的總結 簡單來說,const cast是c 提供的四種顯示型別轉換的方式之一,其主要作用是移除變數的const限定符從而改變表示式的常量屬性...
mysql型別轉換c 型別轉換 C 型別轉換
一 簡介 型別轉換 把資料從一種型別轉換另一種型別 我們要求等號兩邊參與運算子必須型別一致,如果不一致,滿足下列條件會發生自動型別轉換或者隱式型別轉換。1.兩種型別相容 例如 int和double 相容 都是數字型別 2.目標型別大於源型別 double int 顯示型別轉換 1.兩種型別相相容 i...
C const cast 使用上的簡單總結
const cast是一種c 運算子,主要是用來去除復合型別中const和volatile屬性 沒有真正去除 變數本身的const屬性是不能去除的,要想修改變數的值,一般是去除指標 或引用 的const屬性,再進行間接修改。include include using namespace std in...