四种类型转换——CPP

C++的四种类型转换

static_cast< T *>(e)

  • 静态转换,在编译期间进行处理;
  • 常用:
    • 在C++中内置的基本数据类型之间进行转换;
    • 在基类和子类之间的指针或引用进行转换,基类指针或引用转换成子类的是不安全的,相反则是安全的;
    • 把void类型指针转换成目标类型;(不安全)
    • 把任何类型的表达式转换成void类型;

const_cast< T*>(e)

  • 作用于同一个类型之间的去常和添常属性的转换;
  • 可以在添加常量属性或者去除常量属性;

dynamic_cast< T * >(e)

  • 在运行期进行类型转换;
  • 如果转换成功则返回指针或者引用,失败则返回NULL(指针)或者抛出异常std::cast(引用);
  • 通常情况,转换时基类要有虚函数;

reinterpret_cast< T*>(e)

  • 执行低级转换,具体结果取决于编译器;
  • 比如将一个int* 转换成int;
  • 它的原理是对二进制进行重新的解释;

注意

  • 尽量避免类型转换,在注重效率的代码中尽量避免dynamic_cast;
  • 如果类型转换时必要的,应该隐藏在某个函数中;
  • 尽量用上述四种类型转换,不要使用旧式转换;