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)
提前致谢.
解读指针(内存地址)作为浮点值不是一个明智的操作,它可能失败,你的平台因为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)