使用指针C++进行转换

mas*_*ann 0 c++ pointers casting

说我有一个对象:

void *tmpValue;
Run Code Online (Sandbox Code Playgroud)

并说我知道tmpValue指向一个双倍.将其转换为double的方法是执行以下操作:

double* dblPtr = (double*) tmpValue;
double dbl = *dblPtr;
Run Code Online (Sandbox Code Playgroud)

但是为什么从void*到double的直接铸造不起作用?

double dbl = (double) tmpValue; //error: "cannot convert from 'void*' to 'double'
Run Code Online (Sandbox Code Playgroud)

提前致谢.

nne*_*neo 6

解读指针(内存地址)作为浮点值不是一个明智的操作,它可能失败,你的平台因为void *double甚至不相同的大小.

您要做的是将指针解释为double *和取消引用该double *指针,如第二个代码段中所示.

您可以在一行中执行此操作:

double dbl = *(double *)tmpValue;
Run Code Online (Sandbox Code Playgroud)

但是,嘿,这是C++.更好

double dbl = *static_cast<double *>(tmpValue);
Run Code Online (Sandbox Code Playgroud)