[英]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.