C++顯式轉(zhuǎn)換中幾種不同的轉(zhuǎn)換方式
我們在上一篇文章中為大家詳細(xì)介紹了C++隱式轉(zhuǎn)換發(fā)生的四種情況,相信大家應(yīng)該會對這一數(shù)據(jù)類型轉(zhuǎn)換方式有一個詳細(xì)的了解啦。那么在這里,將會為大家詳細(xì)介紹其中的另一種轉(zhuǎn)換方式,C++顯式轉(zhuǎn)換的基本內(nèi)容。#t#
C++顯式轉(zhuǎn)換包含四種轉(zhuǎn)換
static_cast : 編譯期的轉(zhuǎn)化,不能轉(zhuǎn)換掉exdivssion的const、volitale、或者_(dá)_unaligned屬性
*所有內(nèi)建類型對象之間的隱式轉(zhuǎn)換都可用static_cast.
*把空指針轉(zhuǎn)換成目標(biāo)類型的空指針用static_cast。
*把任何類型的表達(dá)式轉(zhuǎn)換成void類型用static_cast。
*類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換也可以用static_cast,但下行轉(zhuǎn)換即當(dāng)把基類指針或引用轉(zhuǎn)換成子類表示時,由于沒有動態(tài)類型檢查,所以是不安全的.反之是安全的.
dynamic_cast : 運行期的轉(zhuǎn)換,類層次間的上行轉(zhuǎn)換和下行轉(zhuǎn)換
* dynamic_cast具有類型檢查的功能,下行轉(zhuǎn)換的效果跟static_cast是一樣的,但下行轉(zhuǎn)換比static_cast更安全。
* dynamic_cast還支持交叉轉(zhuǎn)換,兩個類如果有共同的祖先,他們的指針就可以用dynamic_cast.
const_cast : 編譯期的轉(zhuǎn)化,類型中的常量
reinterpret_cast : 任何指針都可以轉(zhuǎn)換成其它類型的指針,可用于如char* 到 int*,或者One_class* 到 Unrelated_class* 等的轉(zhuǎn)換,因此可能是不安全的。
C++內(nèi)建類型指針之間不含有隱式轉(zhuǎn)換(void * 除外),需要C++顯式轉(zhuǎn)換。
- int ival = 0;
- char* pc = NULL;
- int* pi = NULL;
- void* pv = NULL;
- const char* pcc = "Hello world";
- const int* pci = &ival;
- const void* pcv = NULL;
- pc = pi; //錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pc = reinterpret_cast<char*>(pi);
//必須使用reinterpret_cast 在位模式層次的顯式轉(zhuǎn)換- pc = pv; //錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pc = static_cast<char*>(pv); //static_cast顯式轉(zhuǎn)換
- pc = pcc; //錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pc = const_cast<char*>(pcc); //const_cast顯式轉(zhuǎn)換
- pc = pcv; //錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pc = static_cast<char*>(const_cast<void*>(pcv));
//先const_cast 后 static_cast.- pv = pc; // OK; 隱式轉(zhuǎn)換到void*
- pv = pi; // OK; 隱式轉(zhuǎn)換到void*
- pv = pcc; //錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pv = const_cast<char*>(pcc);
//OK, const_cast顯式轉(zhuǎn)換,并且char* 隱式轉(zhuǎn)換到void*- pv = pcv;//錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pv = const_cast<void*>pcv;//OK, const_cast顯式轉(zhuǎn)換.
- pcpcc = pc; // OK; 隱式轉(zhuǎn)換到const char*
- pcc = pi; // 錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pcc = reinterpret_cast<char*>(pi);
//必須使用reinterpret_cast 在位模式層次的顯式轉(zhuǎn)換.- pcc = pv; // 錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pcc = static_cast<char*>(pv); //static_cast顯式轉(zhuǎn)換
- pcc = pci;// 錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pcc = reinterpret_cast<char*>pci;
//必須使用reinterpret_cast 在位模式層次的顯式轉(zhuǎn)換.- pcc = pcv;//錯誤,沒有標(biāo)準(zhǔn)的隱式轉(zhuǎn)換.
- pcc = static_cast<const char*>(pcv); //static_cast顯式轉(zhuǎn)換.
- pcv = pv; // OK; 隱式轉(zhuǎn)換到const void*
- pcpcv = pc; // OK; 隱式轉(zhuǎn)換到const void*
- pcv = pi; // OK; 隱式轉(zhuǎn)換到const void*
- pcv = pcc;// OK; 隱式轉(zhuǎn)換到const void*
以上就是對C++顯式轉(zhuǎn)換的一些基本介紹。