C++是一种面向对象的语言,面向对象的三大特点是,封装、继承和多态。要想很好的使用面向对象的多态,就一定要使用指针和引用,而在使用指针和引用的过程中必然会碰到类型的转换。C++的类型转换分为,隐式转换和显示转换,本文主要讨论C++中的四种显示转换运算符,
const_cast <new_type> (expression),用于移除变量的const或者volatile的限定。去除变量const限定并不是为了修改const变量的值,而是当我们调用一个参数不是const的函数,而实际传入的参数却是const时,使用const _cast去除const限定,以便函数能够接受这个实际参数。
static_cast <new_type> (expression),没有运行时类型检查来保证转换的安全性。
为什么需要static_cast强制转换?
主要用途:
dynamic_cast <new_type> (expression),把expression转换成new_type类型,new_type必须是类的指针、类的引用或者void*。若new_type是类的指针,则expression也必须是类的指针;若new_type是类的引用,则expression也必须是类的引用。
为什么需要dynamic_cast强制转换?
主要用途:
实例
dynamic_cast和static_cast进行上下行转换实例
class Base { public: int m_iNum; virtual void foo(); }; class Derived:public Base { public: char *m_szName[100]; }; void func(Base *pb) { Derived *pd1 = static_cast<Derived *>(pb); Derived *pd2 = dynamic_cast<Derived *>(pb); }在上面的代码段中,
reinterpret_cast <new_type> (expression),new_type必须是一个指针、引用、算数类型、函数指针或者成员指针。该运算符主要用于处理无关类型的转换;它会产生一个新的值,这个值会有与原始参数(expression)完全相同的比特位。
IBM的C++指南里,说明的reinterpret_cast的用途:
注意:操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换;reinterpret_cast是为了映射到一个完全不同类型的意思,需要把类型映射回原有类型时用到它。
const_cast, http://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html
stati_cast,http://www.cnblogs.com/ider/archive/2011/07/31/cpp_cast_operator_part4.html
dynamic_cast,http://www.cnblogs.com/ider/archive/2011/08/01/cpp_cast_operator_part5.html
reinterpret_cast,http://www.cnblogs.com/ider/archive/2011/07/30/cpp_cast_operator_part3.html
C++中类型转换探讨,http://www.360doc.com/content/11/0123/19/59141_88548674.shtml
Inside C++ Object model