C++转型操作符
虽然C++兼容旧式C语言转型的方式,但推荐统一使用C++新型的4个转型操作符:static_cast, const_cast, dynamic_cast, reinterpret_cast.
1. static_cast
c旧时转型形式应采用static_cast来转换,其基本上具有与c旧式转型的功能:
(type) expression →→ static_cast<type> (expression)
2. const_cast
改变表达式中的常量性或变易性,常见用途是将某个对象的常量性去除。
class Circle {...}; void resize(Circle* p); Circle a; const Circle& b = a; resize(&b); //执行出错 resize(const_cast<Circle*>(&b)); //执行成功
3. dynamic_cast
用来安全的执行继承体系中的向下转型。将指向基类对象的指针或引用转化为子类对象的指针或引用,若转换失败,则会返回null指针(转换对象是指针)或一个exception异常(转换对象是引用)。
4. reinterpret_cast
常用于转换函数指针类型。此操作符与编译平台相关,不具备移植性,因而不推荐使用。
typede int (*Func) (); Func funcPtr; void doSomething(); funcPtr = &doSomething; //错误,返回类型不符合 funcPtr = reinterpret_cast<Func>(&doSomething) // 编译正常