博客园  :: 首页  :: 新随笔  :: 管理

const_cast static_cast reinterpret_cast dynamic_cast

Posted on 2013-04-14 23:11  zhangyuxiu  阅读(196)  评论(0)    收藏  举报

static_cast  编译器在编译期间检查,用于在内置数据类型之间的转化,或者在同一个继承体系内部转来转去。

dynamic_cast 只能应用于指针和引用,不能用于内置数据类型之间的转化。在运行期间会检查这个转化是否可行。可以完成类结构层次的提升。

  dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。

  它不仅仅像static_cast那样,检查转换前后的两个指针是否属于同一个继承树,它还要检查被指针引用的对象的实际类型,确定转换是否可行。如果这两个指针间不能转换,转换就会失败,此时返回空指针(NULL)。

const_cast  编译器在编译期间检查;用于将一个对象的const,volatile,_unaligned的属性去掉,或加上。

  对于本身定义时为const的类型,即使你去掉const性,在你操作这片内容时候也要小心,只能r不能w操作,否则还是会出错。const_cast操作不能在不同的种类间转换。相反,它仅仅把一个它作用的表达式转换成常量。它可以使一个本来不是const类型的数据转换成const类型的,或者把const属性去掉。

reinterpret_cast