一、定义
这里要了解的是c++中的类型转换大体上和c语言中类型转换是相同的,但是c++中也有自己的一套转换
方法,它们分别是1、static_cast 2、const_cast 3、dynamic_cast 4 、reinterpret_cast
二、使用
1、static_cast转换操作符
最常用的类型转换符,将常见的类型进行互相转换,例如
int main()
{
int a = 2 ;
float b ;
b = static_cast<float>(a);//进行类型转换
cout<<b<<endl;
}
2、const_cast转换操作符
用于去除const属性,把const类型的指针变为非const类型的指针
int main()
{
const int a = 2 ;
const int* p1 = &a;
int *p2 = const_cast<int*>(p1);//const指针到非const指针的转换
cout<<*p2<<endl;
}
3、dynamic_cast转换操作符
该操作符用于运行时检查该转换是否类型安全,但只在多态类型时合法,即该类至少具有一个虚拟方法。
dynamic_cast主要用于类层次间上行和下行的转换,还可以用于类之间的交叉转换。在类层次进行上行
转换时,dynamic_cast和static_cast的效果是一样的;在进行下行转换时,dynamic_cast具有类型检查
的功能,比static_cast安全。主要作用是将父类指针转换子类指针。
class A
{
public :
int a;
virtual void getA(int& b)
{
a = b;
cout<<a<<endl;
}
};
class a :public A
{
public :
int b;
};
int main()
{
int b =10;
a *p = dynamic_cast<a*>(new a);//p指向的是子类时,所有操作都是合法的
//a *p = dynamic_cast<a*>(new A);//p指向父类时,p为空从某种意义来说是非常安全的,但不会报错
p->getA(b);
}
4、reinterpret_cast转换操作符
它能用于两个毫不相关的类之间的转换,在没了解两个类的内存节构的情况下可能会导致诸如
内存膨胀或者截断的问题因此它是不安全的。
class A
{
public :
int a;
};
class B
{
public :
int b;
};
int main()
{
int a = 1;
A *p=reinterpret_cast<A*>(new B);//不安全转换
}
欢迎各位指出不足之处