Qt中的強制類型轉換


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)

備注:

  1. 常量指針被轉化成非常量的指針,並且仍然指向原來的對象。
  2. 常量引用被轉換成非常量的引用,並且仍然指向原來的對象。
  3. 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM