cast-name<type>(expression);
cast-name : static_cast 、dynamic_cast 、 const_cast 、 reinterpret_cast。
dynamic_cast
支持运行时的类型识别。
static_cast
任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast。
当需要把一个较大的算术类型赋值给较小的类型时,static_cast非常有用。
对于编译器无法自动执行的类型转换也非常有用。例如:
- 我们可以使用static_cast找回存在于void *指针中的值:
void * p = &d; //任何非常量对象都能存入void*
double *dp =static_cast<double*> (p); //必须确保转换后所得类型就是指针所指类型,不然,未定义。
const_cast
用于改变运算对象的底层const。
const_cast转换符是用来移除变量的const或volatile限定符。
const char *cp;
char * p=const_cast<char*> (cp); //正确,但通过cp写值是未定义行为
传统转换方式实现const_cast。const_cast实现原因就在于C++对于指针的转换是任意的,它不会检查类型,任何指针之间都可以进行互相转换,因此const_cast就可以直接使用显示转换(int*)来代替: