void*裸指针的使用及转换
我们知道,在使用裸指针时,对于那些不确定的类型指针,我们可以用void*
来进行指向.
真正知道了类型之后,需要进行转换.具体的转换方式有:
static_cast<T*>
const_cast<T*>
reinterpret_cast<T*>
dynamic_cast<T*>
-
static_cast
:
显式转换,只要你知道要转换的类型,且不包含底层const都可以使用.这也是最常用的一个转换:double d = 2; void *p = &d; double *dp = static_cast<double *>(p);
-
const_cast
:
只能改变底层const,即可以将常量转为非常量(去掉const属性),但是对它进行修改仍然是错误的.常常用于函数重载.const char *cp; char *p = static_cast<char *>(cp); //错误,static_cast不能去掉const属性 static_cast<string>(cp); //正确,转换为string类型 const_cast<string>(cp); //错误,只能修改const属性 char *p = const_cast<char*>(cp); //正确,去掉const属性
-
reinterpret_cast
在bit层面上,为要转换的指针提供重新解释.即:int *i