说我有一个对象:
void *tmpValue;
并说我知道tmpValue指向双倍。 将其转换为double的方法是执行以下操作:
double* dblPtr = (double*) tmpValue;
double dbl = *dblPtr;
但为什么从void *直接转换为double不起作用?
double dbl = (double) tmpValue; //error: "cannot convert from 'void*' to 'double'
提前致谢。
答案 0 :(得分:6)
将指针(内存地址)解释为浮点值不是一种明智的操作,并且它可能在您的平台上失败,因为void *
和double
的大小不同。< / p>
您要做的是将指针解释为double *
并取消引用double *
指针,就像在第二个代码段中一样。
您可以在一行中执行此操作:
double dbl = *(double *)tmpValue;
但是,嘿,这是C ++。做得更好
double dbl = *static_cast<double *>(tmpValue);
答案 1 :(得分:1)
您无法从指针类型强制转换为double。回想一下,指针类型本质上是一个存储器地址(通常是4个字节,包含存储器上数据的位置信息)。因此,您可以将指针类型转换为整数,但转换为double是没有意义的。
当你将void *指针转换为double *指针类型时,你基本上是在说“这现在是一个double的地址而不是void *的地址”
如果你想在一个班轮中获得双倍的值,你可以做
double dbl = *( (double*) tmpValue );
答案 2 :(得分:-1)
double dbl = *(double*)tmpValue
答案 3 :(得分:-2)
取消引用指针并强制转换值