class A{
int a;
}
class B{
int b;
}
class C:public A{
int c;
}
int main()
{
B b;
C c;
A* p1 = (A*) &b; // 这句是c风格的强制类型转换,编译不会报错,留下了隐患
A* p2 = static_cast<A*>(&b); // static_cast在编译时进行了类型检查,直接报错
}
static_cast 和(type) var无任何区别
reinterpret_cast 是指不相关的类型之间相互转化
int arr[10]={1,2,3,4,5};
int a=10;
//int *p =static_cast<int*>(a); 不允许这样子转化
int *p=reinterpret_cast<int*>(a); //允许这样子转化
const_cast用法:去const或者加上const
void fun(int &a){
std::cout<<a<<std::endl;
}
int main(){
const int a;
//fun(a); C++编译器不允许出现将const常量当引用参数传参
fun(const_cast<int&>(a));//允许使用const_cast,并且只能应用与指针和引用
return 0;
}