一、Const_cast
const_cast是修改類型的const或者volatile屬性。使用該運(yùn)算方法后可以返回一個(gè)紙箱非常量的指針或者引用,使用該運(yùn)算符后就可以返回一個(gè)紙箱非常量的指針(或者引用)。用法如下:
const_cast<type_if>(expression),type_id和expression的類型是一樣的。
轉(zhuǎn)換為非常量的指針或者引用還是指向原來(lái)的對(duì)象,const_cast一般是用來(lái)修改底指針。用例如下:
1 // ConsoleApplication1.cpp : Defines the entry point for the console application. 2 // 3 4 #include "stdafx.h" 5 #include <cstdint> 6 #include<string> 7 #include<iostream> 8 using namespace std; 9 class person 10 { 11 public: 12 int n_num; 13 virtual void doSomething() 14 { 15 cout << "i am a person" << endl; 16 } 17 }; 18 class colorPerson :public person 19 { 20 public: 21 char* mName; 22 }; 23 void change(person *person) 24 { 25 colorPerson * cp1 = static_cast<colorPerson*>(person); 26 cout << "start to call cp1" << endl; 27 if (cp1 != NULL) 28 { 29 cp1->doSomething(); 30 } 31 else 32 { 33 cout << "cp1 is null" << endl; 34 } 35 colorPerson *cp2 = dynamic_cast<colorPerson*>(person); 36 cout << "start to call cp2" << endl; 37 if (cp2!= NULL) 38 { 39 cp2->doSomething(); 40 } 41 else 42 { 43 cout << "cp2 is null" << endl; 44 } 45 } 46 int main() 47 { 48 const person *pconst=new person(); 49 //pconst->n_num = 10; 50 person *noConstP = const_cast<person *>(pconst); 51 noConstP->n_num = 100; 52 return 0; 53 }
const_cast的目的不是為了讓你去修改一個(gè)本身被定義為const的值,因?yàn)檫@樣做的后果是無(wú)法預(yù)料的。const_cast的目的是修改一些指針或者引用的權(quán)限,如果我們?cè)瓉?lái)無(wú)法通過(guò)這些指針或者引用修改某一些內(nèi)存的值,通過(guò)const_cast就可以了。
二、reinterpre_cast
reinterpret_cast操作符是修改了操作數(shù)的類型,重新解釋了給出的對(duì)象的比特模型而沒(méi)有進(jìn)行二進(jìn)制的轉(zhuǎn)換??梢岳斫鉃関iew_ashuo或者treat_as的操作。就是把內(nèi)存中的值進(jìn)行重新解釋。在內(nèi)存中都是0和1組成的值。而這些0和1具體代表的是什么值,我們就是要看具體的類型了,比如8位bit的ASCII碼值,16位或者32位的int值。reinterpret_cast復(fù)制二進(jìn)制比特位到目標(biāo)對(duì)象,轉(zhuǎn)換后的值與原始對(duì)象無(wú)關(guān)但是比特位是一樣的。
?
本文摘自 :https://www.cnblogs.com/