一、定义
这里要了解的是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);//不安全转换 }
欢迎各位指出不足之处