C++四种类型的转换
包括这四种:const_cast , static_cast , dynamic_cast , reinterpret_cast
先来说下C语言中的类型转换,非常的暴力,就是耍流氓:
float a = 12.23;
int b = (int)a;
下面我写的都是最基础的,简单的,下面这篇文章写的很详细,我还刚学这东西,就只是写一下我自己的理解:
c++ 四种强制类型转换介绍_ydar95的博客-CSDN博客_c++指针类型强转c++ 四种强制类型转换介绍const_cast , static_cast , dynamic_cast , reinterpret_cast1.https://blog.csdn.net/ydar95/article/details/69822540
static_cast
int main()
{
float a = 12.23;
int b = static_cast<int>(a); //尖括号中的就是想转的类型
//等同于int b = (int)a;
cout << b << endl;
}
基本数据类型的转换,就靠static_cast来进行转换!!!
const_cast
int main()
{
const int a = 10;
int* p = const_cast<int*>(&a); //const_cast在这块的作用就是去常性
//这行代码等于int* p = (int*)&a; 这玩意是C语言中的强转
}
?const_cast去常性!!!
reinterpret_cast
int main()
{
int a = 10;
char* pq = reinterpret_cast<char*>(&a);
//和C语言中强转char* p = (cahr*)(&a);
}
整型a,为什么可以将int的地址赋值给char* p呢,拿reinterpret_cast对a的地址进行重新解释,赋值给char* p,相当于C语言中的char* p = (cahr*)(&a);
dynamic_cast
class Object
{
public:
virtual void fun() {}
};
class Base:public Object
{
public:
virtual void fun() {}
};
int main()
{
Object* op = NULL;
Base* bp = NULL;
Object obj; //基类对象
Base base; //派生类对象
op = dynamic_cast<Object*> (&base); //从派生类指针转换到基类指针
//相当于:op = &base;
//需要注意的是,我们不能将基类指针转换到父类指针
}
dynamic_cast将派生类base转换成Object*赋值给基类指针(派生类指针转换到基类指针),但是不可以将基类指针转换到父类指针,会报错(无法将Object* 类型转换到Base*)
|