[英]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_cast
從void *
到任何指針類型,或者在一個指向其他類型的指針的意義上,在指向相關類型的指針之間。
reinterpret_cast
旨在在指向不相關類型的指針之間使用。 是相當於一個static_cast
從第一類型至void *
隨后用static_cast
從void *
到第二類型。 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_cast
是reinterpret_cast
的方法。
您的問題沒有提供足夠的詳細信息,無法確定您的情況是否“安全”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.