隐式转换
编译器自动进行的转换,为了尽可能减少精度损失且不出错。
例如3与3.14相加,首先为了减少损失精度,会转为double进行计算,结果为6.14,然后考虑赋值,如果初始化的变量为int型,就要再次转换为int,从而变成了6。

何时发生隐式转换
(1)算术计算带来的转换
(2)条件判断带来的bool值转换
(3)赋值和初始化
(4)多种类型一起使用时的统一
(5)函数调用

算数转换
一般规则为转换为最宽的类型
对于char,short等小整数类型,只要可以转成int,一般都会进行整型提升

其他隐式类型转换
数组转换为指针
指针的转换(void*等)
类类型的转换(用输入cin作为条件,用string定义c风格字符串)

显式转换
static_cast:只要不包含底层const且具有明确定义,一般都可以使用
int i,j;
double d = static_cast<double>(j)/i;//显式转换为double型
还可以使用它进行把void*型的指针赋值给其他类型的指针
const_cast:改变对象的底层const
const char *p;
char *q = const_cast<char*>(p);
reinterpret_cast:重新解释,不过本质上并没有转换,相当于只是对编译器声明这里没有错误,非常危险,减少使用
int *p;
char *pc = reinterpret_cast<char *>(p);