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 *ip; char *pc = reinterpret_cast

本文探讨了void*裸指针的使用及转换,包括显式转换、const_cast转换以及reinterpret_cast的潜在问题。同时,文章详细阐述了shared_ptr<void>的转换,通过实例说明了其与普通void指针的区别,并解释了shared_ptr<void>能够工作的原理。
最低0.47元/天 解锁文章
361





