簡體   English   中英

在char *指針上的reinterpret_cast

[英]reinterpret_cast on a char* pointer

我必須更改函數getData()的原型,該函數基本上是舊版源代碼。 如下所示,從返回char*更改它之后,由於static_cast ,我開始出現編譯錯誤。我的問題是,使用reinterpret_cast而不是static_cast是否安全?

  class C1{

     public:

     //void *getData() {return data;} //Legacy implementation*
     char *getData() {return data;}  //My new implementation

     private:
       char data[100];
   };

   int main()
   {
       C1 myobj;   
       unsigned char* begin;

       begin=static_cast<unsigned char*>(myobj.getData());  *//<== This gives compile error.use reinterpret_cast ?*
       return 0;
   }

有沒有比reinterpret_cast更好的解決方案?

您可以static_castvoid *到任何指針類型,或者在一個指向其他類型的指針的意義上,在指向相關類型的指針之間。

reinterpret_cast旨在在指向不相關類型的指針之間使用。 是相當於一個static_cast從第一類型至void *隨后用static_castvoid *到第二類型。 T和U是不相關的類型:

U *u = ...;
T *t;

t = reinterpret_cast<T *>(u);  /* strictly the same as would be
t = static_cast<T *>(static_cast<void *>(u));  */

這取決於您要完成的工作。 如果您只想使用data的按位表示形式,並且每個元素都被解釋為unsigned char ,那么reinterpret_castreinterpret_cast的方法。

您的問題沒有提供足夠的詳細信息,無法確定您的情況是否“安全”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM