float* val= reinterpret_cast<float*>(memcpy());
我们知道,memcpy()方法返回void指针(void *)。
除了reinterpret_cast之外,是否可以对void *进行类型转换?有人请帮忙。
答案 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));