C++推荐使用显式的类型转换操作符,C里面都是强制类型转换。因为C++里面有虚表,所以在转化过程中有些复杂。C++的类型转换符有四个reinterpret_cast, static_cast, const_cast, dynamic_cast.
const_cast比较简单,它的作用是除去变量的const或者novolatile属性。
static_cast在功能上基本上与C风格的类型转换一样强大,含义也一样。但是有更多的限制。
reinterpret_cast重新解释类型的定义。是在运行时操作的。
dynamic_cast,它被用于安全地沿着类的继承关系向下进行类型转换。这就是说,你能用dynamic_cast把指向基类的指针或引用转换成指向其派生类或其兄弟类的指针或引用,而且你能知道转换是否成功。失败的转换将返回空指针(当对指针进行类型转换时)或者抛出异常(当对引用进行类型转换时)。据说效率比较低。
关于reinterpret_cast和static_cast的区别可以看如下的小段代码。这段代码可以看出c++的虚表对变量的存储便宜的影响。
阅读(1406) | 评论(0) | 转发(0) |