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;
- 如果类型转换时必要的,应该隐藏在某个函数中;
- 尽量用上述四种类型转换,不要使用旧式转换;