2、型。没有运行类型检查被执行以确保转换的安全性。static_cast运算符可被用在例如转换一个基类指针到一个派生类指针的操作,这样的转换不总是安全的,相对而言,dynamic_cast是安全的。 (注意:static_cast<>()转换只是返回当前强制类型转换过后的值,也就是说,使用该操作符进行强制类型转换的时候,并不改变用于转换的源值,而只是暂时借用源值转换并保存值,所以要定义另外一个变量来保存转换以后的值。) 例: class B { ... }; class D : public B { ... }; vo
4、. }; class B { ... }; void f() { A* pa = new A; B* pb = new B; void* pv = dynamic_cast(pa); // pv 现在指向了一个类型为A的对象 ... pv = dynamic_cast(pb); // pv 现在指向了一个类型为B的对象 } 3、reinterpret_cast运算符允许任何指针被转换到任何其它指针类型,它还允许任何整型转换到任意指针类型,且反之亦然
5、。滥用reinterpret_cast运算符可轻易导致不安全,除非是所期望的转换是固有的低等级,否则你应使用其它转换运算符之一。 例: class A { ... }; class B { ... }; void f() [Page]{ A* pa = new A; void* pv = reinterpret_cast(pa); // pv 现在指向了一个类型为B的对象,这可能是不安全的 ... } 4、const_cast运算符可被用于从一个类中除去const、volatile
6、和_ _unaligned属性任何对象类型的指针或一个数据成员的指针可被显式地转换到完全相同的类型,带const,volatile和__unaligned限定符除外。对指针和引用,结果将指向源对象,对数据成员指针结果和数据成员的源指针一样指向同一成员。由于依赖于引用对象的类型,通过指针、引用或数据成员指针的求结果的写操作将产生未定义的动作 例: class A { ... }; void f() { const A *pa = new A;//const对象 A *pb;//非const对象 //pb =