cons程式設計客棧t_cast是一種c++運算子,主要是用來去除復合型別中const和volatile屬性(沒有真正去除)。
const_cast:作用:
指標或引用的轉換符,用來移除變數的const或volatile限定符。
先來看c中不嚴謹的地方:
const int ca = 30;
int* q = &ca;//c中是可以編譯的,最多會得到乙個warning,隨後就可以對ca裡的資料進行操作了。
疑問:那const幾乎是失效的。
在c++編譯中就會報錯:
error: invalid conversion from 『const int*' to 『int*' [-fpermissive]//無效的轉換,把const int交給int.從這個提示,也可看出針對的是指標。int* q = &ca;
const_cast應用場景?? 不具實際意義的用法:
const int ca=30;
const int* p=&ca;
int* q=const_castp;
*q=10;//列印一下ca/p/q的位址可以看到位址是一樣的,但ca的值仍是30,其他兩個值都變為了10
雖然沒有實際應用的意義,但可以看到const_case的意義,確實如c一樣,可以將位址給另外乙個指標,同時修改另外指標所指空間裡面值,確實是可以修改裡面的值。但原程式設計客棧const宣告的變數的值也沒有變。指向位址是乙個位址,但值確有兩種,是不是不太對呢???如何來正確理解呢?
當使用const宣告乙個常量時,在c++中,就是作為乙個常量寫到rom(微控制器裡面的概念,對於pc來說,可以理解為寫到了磁碟中),並且這個rom位址對映到記憶體,指向的位址不變。
當使用const_cast,去除掉const限定後,將位址賦給另外的變數指標,改變變數指標的值,確實是改變了記憶體位址中存的資料,但並沒有改變在外存中的資料。所以此時讀取變數指標的值,其實是取的記憶體中的資料,看到的就是改變的值。
const_cast實際程式設計應用:
需要使用const宣告的常量的值,尤其是呼叫了乙個引數不是const的函式,而我們要傳進去的實際引數確實const的情形。
使用帶const指標指向乙個變數時,需要修改變數的值。如下**:
int a = 10;
const int* p = &a;
int* q=const_castp;
*q=24;//可以得到a,q,p都指向同一位址,同時值也被同時修改了。
整體測試**如下:
#include
using namespace std;
int main(int argc, const char** ar**)
擴充套件:其他三種指標轉換運算子:
static_cast (expression)
reinterpret_cas程式設計客棧t (expression)
dynamic_cast (expression)//以後遇到再說吧,先放到這裡作下對比!
C 之const cast常見用法
c 提供了四個轉換運算子 1.const cast expression 2.static cast expression 3.reinterpret cast expression 4.dynamic cast expression 用const cast來去除const限定 const int ...
c 中的 const cast轉換
是從微軟那邊手工抄寫的 include using namespace std class cctest void cctest setnumber int n void cctest printnumber const int main 執行結果 before 8 const cast 8 aft...
C 中強制變換之const cast
今天學習了一下c 中的強制轉換,看了const cast,我發現了這個轉換關鍵字的奇怪之處,於是把它記錄一下,廢話不說,先看乙個程式 1 include 2 3using namespace std 45 intmain 6以上程式列印的結果 一開始 pval 和val的值都是5,因為他們指向同一位...