C++提供了4種類型轉換操作符來應對不同場合的應用。
| 操作符 | 注釋 |
| const_cast | 去const屬性 |
| static_cast | 靜態類型轉換,例如int轉換成char |
| dynamic_cast | 動態類型轉換,如子類和父類的多態類型轉換 |
| reinterpret_cast | 僅僅重新解釋類型,但沒有進行二進制轉換 |
| qobject_cast | Qt特有,類似dynamic_cast,優點是不需要RTTI支持,類T必須繼承於QObject,並使用Q_OBJECT聲明 |
cnst_cast
//! 該運算符用來修改類型的const或volatile屬性(除了const 或volatile修飾之外,type_id和expression的類型是相同的) const_cast<type_id>(expression)
備注:
- 常量指針被轉化成非常量的指針,並且仍然指向原來的對象。
- 常量引用被轉換成非常量的引用,並且仍然指向原來的對象。
- const_cast一般用於修改底指針。如const char *p形式。
static_cast
//! 該運算符把expression轉換為type-id類型(沒有運行時類型檢查來保證轉換的安全性) static_cast<type-id>(expression)
1 std::list<AlgorithmDetail*> A; 2 AlgorithmDetail a1; 3 a1.IO = false; 4 a1.funtion = "a1"; 5 a1.variable = "a1"; 6 a1.value = QPoint(1,2); 7 8 AlgorithmDetail a2; 9 a2.IO = false; 10 a2.funtion = "a2"; 11 a2.variable = "a2"; 12 a2.value = QPoint(4,5); 13 14 A.push_back(&a1); 15 A.push_back(&a2); 16 for (auto it = A.begin(); it != A.end() ; it++ ) 17 { 18 qDebug()<<const_cast<AlgorithmDetail*>(*it)->value; 19 }

備注:
1.用於類層次結構中基類(父類)和派生類(子類)之間指針或引用的轉換;進行上行轉換(把派生類的指針或引用轉換成基類表示)是安全的;進行下行轉換(把基類指針或引用轉換成派生類表示)時,由於沒有動態類型檢查,所以是不安全的。
2.數據類型之間的轉換,如把int轉換成char,把int轉換成enum。這種轉換的安全性也要開發人員來保證。
3,。把空指針轉換成目標類型的空指針。
4.把任何類型的表達式轉換成void類型。
5.static_cast不能轉換掉expression的const、volatile、或者__unaligned屬性。
dynamic_cast
//! 該運算符把expression轉換成type-id類型的對象(Type-id 必須是類的指針、類的引用或者void*) dynamic_cast<type-id>(expression)
reinterpret_cast
//! reinterpret_cast運算符是用來處理無關類型之間的轉換;它會產生一個新的值,這個值會有與原始參數(expressoin)有完全相同的比特位。 reinterpret_cast<type-id>(expression)
(轉自:https://blog.csdn.net/qq_15647227/article/details/89297621)
