Loading

[C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型

C++四种新式转型:

  1. const_cast(expression)
  2. dynamic_cast(expression)
  3. reinterpret_cast(expression)
  4. static_cast(expression)

    ①const_cast通常被用来将对象的常量性移除,它是唯一有此能力的C++style转型操作符
    ②dynamic_cast主要用来执行“安全向下转型”,也就是决定某个对象是否归属于继承体系中的某个类型,它是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作。
    ③reinterpret_cast意图执行低级转型,实际动作和结果取决于编译器,这也就表示它不可移植,例如将一个int*转换成Int。
    ④static_cast用来强迫隐式转换,例如将non_const对象转换成const对象,或者将int转换成double等,也可以用来执行上述多种转换的反转换,比如void*转换成typed指针,或者pointer-to-base转换成pointer-to-derived,但是它无法将non-const转换成const-cast,这只有const_cast能办到。
    注意:之所以需要dynamic_cast,通常是因为你想在一个你认定为derived class对象身上执行derived class操作函数,但你的手上却只有一个“指向base class”的pointer或者reference,你只能用它们来处理对象。

    总结:①如果可以,尽量避免转型动作,特别是在注重效率的地方避免dynamic_cast(会多次使用strcmp)如果有个设计需要转型动作,试着发展无需转型的设计。
    ②如果转型是必要的,试着将它隐藏于某个函数背后,客户随后可以调用该函数,而不需要将转型放入他们的代码中。
    ③您可使用C++stytle的转型,也不要使用旧式转型,前者很容易识别出来,而且也有各自的职能。

posted @ 2017-04-10 21:43  李正浩  阅读(98)  评论(0编辑  收藏  举报