一个指向任何对象 类型的指针都可以赋值给类型为void* 的变量,void* 可以赋值给另一个void* ,两个void* 可以比较相等与否,而且可以显式地将void* 转换到另一个类型。其它操作都是不安全的,因为编译器并不知道实际被指的是哪种对象。因此,对void* 做其他任何操作都将引起编译错误。要使用void*,就必须显式地将经转换到某个指向特定类型的指针。
例:
void Test(int *pi)
{
void *pv = pi; //ok ,从 int* 到 void* 的隐式转换
*pv ; //错误:void* 不能间接引用
pv++; //错误:void* 不能增量(不知道被指定类型的大小)
int *pi1 = static_cast<int*>(pv); //ok: 显式转换回 int*
double * pi2 = pv; //错误
double *pi3 = pi; //错误
double *pi4 = static_cast<double*>(pv); //ok: 不安全
}
1.一般来说,如果一个指针被转换(“强制”,cast)到与被批对象的实际类型不同的指针,使用后一个指针就是不安全的。 void* 的最重要用途是需要向函数货传递一个指针,而又不能对对象的类型做任凭假设。还有就是从函数返回一个无类型的对象。要使用这样的对象。必须通过显式的类型转换。
2,到函数的指针与到成员的指针都不能赋给void*