是否可以使用reinterpret_cast对其进行类型化*浮动*其他?

时间:2018-01-23 05:19:21

标签: c++11 reinterpret-cast typecasting-operator

float* val= reinterpret_cast<float*>(memcpy());

我们知道,memcpy()方法返回void指针(void *)。

除了reinterpret_cast之外,是否可以对void *进行类型转换?有人请帮忙。

1 个答案:

答案 0 :(得分:0)

  

除了reinterpret_cast之外,是否可以将void*强制转换为float*?有人请帮忙。

您可以使用C风格的演员:(float*)memcpy(...)

但是,两者都可能是错误的,具体取决于memcpy的参数是什么。

如果您使用:

 float src[10] = { ... }; // Initialize to some values
 float dest[10];

 float* p = reinterpret_cast<float*>(memcpy(dest, src, sizeof(src));

完全正常,因为memcpy会返回dest,这有效float*

但是,如果您使用:

 int src[10] = { ... }; // Initialize to some values
 int dest[10];

 float* p = reinterpret_cast<float*>(memcpy(dest, src, sizeof(src));

您的程序将有未定义的行为。

使用C风格的演员虽然不适合第一种情况但是不错。在第二种情况下,它将导致未定义的行为。

您也可以使用static_cast

float* p = static_cast<float*>(memcpy(dest, src, sizeof(src));