---------------------------------------------------------------------------------------------------------------------------------
static_cast
任何具有明确定义的类型转换, 只要不包含底层const, 都可以使用static_cast。
int i, j;
double slope = static_cast<double> j / i ; //将j从int类型显示的强制转换成double类型
强制转换告诉读者和编译器, 不在乎精度的损失。
static_cast 对于编译器无法自动执行的类型转换非常有用。
void* p = &d; //任何常量对象的指针都能存入
double *dp = static_cast<double* >(p); //将void转换成初始的指针类型。
把指针存放在void* 中, 并且使用static_cast将其强制转换回原来的类型时, 应该确保指针的值保持不变(前后指针类型一样)。
---------------------------------------------------------------------------------------------------------------------------------
const_cast(将常量对象改变为非常量对象)
const_cast只能改变运算对象的底层const(指针所指的对象是常量)。
const char *pc;
char *p = const_cast<char *> (pc); //正确, 但是通过p写值是未定义的行为