程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++顯式轉換中幾種不同的轉換方式

C++顯式轉換中幾種不同的轉換方式

編輯:C++入門知識

我們在上一篇文章中為大家詳細介紹了C++隱式轉換發生的四種情況,相信大家應該會對這一數據類型轉換方式有一個詳細的了解啦。那麼在這裡,將會為大家詳細介紹其中的另一種轉換方式,C++顯式轉換的基本內容。

  • C++回調函數代碼示例解讀
  • C++二維數組new幾種應用方法點評
  • C++ delete具體用法簡述
  • C++析構函數不同使用方式
  • C++隱式轉換各種發生情況

C++顯式轉換包含四種轉換

static_cast : 編譯期的轉化,不能轉換掉exdivssion的const、volitale、或者__unaligned屬性

*所有內建類型對象之間的隱式轉換都可用static_cast.

*把空指針轉換成目標類型的空指針用static_cast。

*把任何類型的表達式轉換成void類型用static_cast。

*類層次間的上行轉換和下行轉換也可以用static_cast,但下行轉換即當把基類指針或引用轉換成子類表示時,由於沒有動態類型檢查,所以是不安全的.反之是安全的.

dynamic_cast : 運行期的轉換,類層次間的上行轉換和下行轉換

* dynamic_cast具有類型檢查的功能,下行轉換的效果跟static_cast是一樣的,但下行轉換比static_cast更安全。

* dynamic_cast還支持交叉轉換,兩個類如果有共同的祖先,他們的指針就可以用dynamic_cast.

const_cast : 編譯期的轉化,類型中的常量

reinterpret_cast : 任何指針都可以轉換成其它類型的指針,可用於如char* 到 int*,或者One_class* 到 Unrelated_class* 等的轉換,因此可能是不安全的。

C++內建類型指針之間不含有隱式轉換(void * 除外),需要C++顯式轉換。

  1. int ival = 0;  
  2. char* pc = NULL;  
  3. int* pi = NULL;  
  4. void* pv = NULL;  
  5. const char* pcc = "Hello world";  
  6. const int* pci = &ival;  
  7. const void* pcv = NULL;  
  8. pc = pi; //錯誤,沒有標准的隱式轉換.  
  9. pc = reinterpret_cast<char*>(pi); 
    //必須使用reinterpret_cast 在位模式層次的顯式轉換  
  10. pc = pv; //錯誤,沒有標准的隱式轉換.  
  11. pc = static_cast<char*>(pv); //static_cast顯式轉換  
  12. pc = pcc; //錯誤,沒有標准的隱式轉換.  
  13. pc = const_cast<char*>(pcc); //const_cast顯式轉換  
  14. pc = pcv; //錯誤,沒有標准的隱式轉換.  
  15. pc = static_cast<char*>(const_cast<void*>(pcv)); 
    //先const_cast 後 static_cast.  
  16. pv = pc; // OK; 隱式轉換到void*  
  17. pv = pi; // OK; 隱式轉換到void*  
  18. pv = pcc; //錯誤,沒有標准的隱式轉換.  
  19. pv = const_cast<char*>(pcc); 
    //OK, const_cast顯式轉換,並且char* 隱式轉換到void*  
  20. pv = pcv;//錯誤,沒有標准的隱式轉換.  
  21. pv = const_cast<void*>pcv;//OK, const_cast顯式轉換.  
  22. pcpcc = pc; // OK; 隱式轉換到const char*  
  23. pcc = pi; // 錯誤,沒有標准的隱式轉換.  
  24. pcc = reinterpret_cast<char*>(pi); 
    //必須使用reinterpret_cast 在位模式層次的顯式轉換.  
  25. pcc = pv; // 錯誤,沒有標准的隱式轉換.  
  26. pcc = static_cast<char*>(pv); //static_cast顯式轉換  
  27. pcc = pci;// 錯誤,沒有標准的隱式轉換.  
  28. pcc = reinterpret_cast<char*>pci; 
    //必須使用reinterpret_cast 在位模式層次的顯式轉換.  
  29. pcc = pcv;//錯誤,沒有標准的隱式轉換.  
  30. pcc = static_cast<const char*>(pcv); //static_cast顯式轉換.  
  31. pcv = pv; // OK; 隱式轉換到const void*  
  32. pcpcv = pc; // OK; 隱式轉換到const void*  
  33. pcv = pi; // OK; 隱式轉換到const void*  
  34. pcv = pcc;// OK; 隱式轉換到const void* 

以上就是對C++顯式轉換的一些基本介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved