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) // 编译正常

 

posted @ 2019-04-07 12:28  zmlgo  阅读(222)  评论(0编辑  收藏  举报