1 隐式类型转换
double d = 1001.1;
int u = d; //double转为int、
char *str = "100ask.taobao.com"
int *p = str;//char*转为int*
注意:编译器汇报警告
2 显式类型转换 c风格
c风格:(强转)
double d = 1001.1;
int u = (int)d; //double转为int、
char *str = "100ask.taobao.com"
int *p = (int*)str;//char*转为int*
注意:强转逻辑没有保障,由程序员保证程序的逻辑性。
3 显式类型转换 c++风格
reinterpret_cast:和C风格的强转是一样的。
格式:reinterpret_cast<type-id> (expression)
1. type-id必须是一个指针、引用、算术类型、函数指针或者成员指针
2. 它可以把一个指针转换成一个整数,也可以把一个整数转换成 一个指针
3 跟c风格的强制转换类似,没有安全性检查
const_cast:
格式:const_cast<type_id> (expression)
该运算符用来去除原来类型的const或volatile属性。除了const或volatile修饰之外,type_id和experssion的类型是一样的。
dynamic_cast
格式: dynamic_cast <type-id> (expression)
该运算符把expression装成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;
如果type-id是类的指针类型,那么expression也必须是类的指针;
如果type-id是类的引用类型,那么expression也必须是类的引用;
注意,1用于多态,即:必须有虚函数
2.主要用于类层次间的上下转换,还可以用于类之间的交叉转换,dynamic_cast和static_cast效果是一样的,在进行上下转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。
static_cast
格式:static_case <type-id> (expression)
该运算符把expression转换为type-id类型
但没有运行时类型检查来保证转换的安全性。