1.static_cast<type>(value);
编译时进行
//type:要转成啥类型?
//value:要转的值
//大家理解成“正常转换”,
//可用场景:
//a。相关类型转换,比如整型和实型之间的转换。
//
//b.子类转父类
//
//c.void * 和其他类型之间的转换。
//不可用场景转换
//不能用于指针类型之间的转换
//那么什么可以用于指针类型之间的转换呢? -->reinterpret_cast
class A {
};
class B :public A {
};
void main() {
//0.复习一下C语言的转换
double d = 10.89;
int a = (int)d;
cout << a << endl;
int aa = 19;
int *pa = &aa;
cout << *pa << endl;
double *ppa = (double *)pa; //虽然可以这么转,build pass,但是使用时,肯定有问题,本来pa指向的是int,指向的是4个字节的数据,转成double *后,double *指向的是8个字节的数据,如果操作 *ppa,就会访问8个字节的数据
cout << *ppa << endl; //不一定有异常,但是数据肯定不对,当前运行结果为:-9.25596e+61
//1.static_cast<type>(value);
//type:要转成啥类型?
//value:要转的值
//大家理解成“正常转换”,编译时进行
//可用场景:
//a。相关类型转换,比如整型和实型之间的转换。
//
//b.子类转父类
//
//c.void * 和其他类型之间的转换。
//d.不可用场景转换
//不能用于指针类型之间的转换
//那么什么可以用于指针类型之间的转换呢? -->reinterpret_cast
//代码演示
//a。相关类型转换,比如整型和实型之间的转换。
double a1 = 99.8;
int a2 = static_cast<int>(a1);
cout << a2 << endl;
//b.子类转父类, A是父类,B是子类
B b;
A aaaaaa = static_cast<A>(b);
//c.void * 和其他类型之间的转换。
int aaa = 19999;
int *paaa = &aaa;
void * pvoid = static_cast<void *>(paaa);
int * paaaaaa = static_cast<int *>(pvoid);
cout << *paaaaaa << endl; //结果正确,19999
}
2. dynamic_cast
运行时转换
主要是将 父类转换成子类
TODO:
3.const_cast 作用不大
将指针或者应用的const 属性去除
注意是 去除const 属性
编译时转换
有啥用?仅仅是语法上support,自己能看懂别人的代码即可
4.reinterpret_Cast
重新解释类型,
编译时转换
可以自由转
应用场景:
将整型转成指针。
将一种指针转成另一种指针