比较比较C++中的static_cast、dynamic_cast、reinterpret_cast类型转换方式

原创 2013年12月03日 15:05:14
类型 static_cast dynamic_cast reinterpret_cast
特点 没有运行时类型检查来保证转换的安全性 dynamic_cast运算符可以在执行期决定真正的类型
reinterpret_cast是C++里的强制类型转换符。
用法
static_cast < type-id > ( expression )
①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;
进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。
②用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。
③把空指针转换成目标类型的空指针。
④把任何类型的表达式转换成void类型。
注意:static_cast不能转换掉expression的const、volatile、或者__unaligned属性。

dynamic_cast < type-id > ( expression )
dynamic_cast主要用于类层次间的上行转换和下行转换,还可以用于类之间的交叉转换。
在类层次间进行上行转换时,dynamic_caststatic_cast的效果是一样的;
在进行下行转换时,dynamic_cast具有类型检查的功能,比static_cast更安全。

reinpreter_cast<type-id> (expression)
操作符修改了操作数类型,但仅仅是重新解释了给出的对象的比特模型而没有进行二进制转换
例如:int *n= new int ;
double *d=reinterpret_cast<double*> (n);
在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。
因此, 需要谨慎使用 reinterpret_cast.
static_cast 与 reinterpret_cast
reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)


C++/面试 - 四种类型转换(cast)的关键字 详解 及 代码

四种类型转换(cast)的关键字 详解 及 代码 本文原创, 禁止转载, 如有需要, 请站内联系. 本文地址: http://blog.csdn.net/caroline_wendy/articl...
  • u012515223
  • u012515223
  • 2014年02月10日 17:08
  • 3220

c++强制转换之dynamic_cast

dynamic_cast(expression) 用法:该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是指针类...
  • diaolingle
  • diaolingle
  • 2016年04月20日 02:44
  • 1727

日期格式转换和时间大小比较

方法一: DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");  String dateBegin=fmt.format(carrierComm...
  • u013714419
  • u013714419
  • 2014年10月24日 10:05
  • 1661

标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_c

使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。 3.1 static_cast 用法:static_cas...
  • neiloid
  • neiloid
  • 2011年11月19日 23:42
  • 603

static_cast与c风格的强制类型转换比较

class A { int a; }; class B { int b; }; class C : public A { int c; }; int main() { ...
  • whatday
  • whatday
  • 2015年12月28日 10:51
  • 3439

C++中四种类型转换运算符的使用方法(reinterpret_cast,const_cast,static_cast,dynamic_cast)

reinterpret_cast,const_cast,static_cast,dynamic_cast,使用方法详解
  • rl529014
  • rl529014
  • 2016年08月25日 23:17
  • 722

C++的类型转换static_cast、dynamic_cast、reinterpret_cast

C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使...
  • wbq2018
  • wbq2018
  • 2013年04月07日 11:14
  • 474

【c++强制类型转换】:dynamic_cast、const_cast 、static_cast、reinterpret_cast

zongs dynamic_cast:   通常在基类和派生类之间转换时使用,run-time   cast const_cast:   主要针对const和volatile的转换.  static...
  • panda1234lee
  • panda1234lee
  • 2014年04月22日 17:39
  • 965

C++类型转换运算符: static_cast<>,reinterpret_cast<>,dynamic_cast<>, const_cast<>

(转)static_cast 与reinterpret_cast static_cast 用法:static_cast ( expression ) 该运算符把expression转换为type...
  • ysmz4
  • ysmz4
  • 2013年12月22日 23:52
  • 540

走进C++程序世界-------强制数据类型转换(static_cast、dynamic_cast、reinterpret_cast、const_cast)

C++类型转换: C++类型转换分为:隐式类型转换和显式类型转换 隐式类型转换: 又称为“标准转换”,包括以下几种情况: 1) 算术转换(Arithmetic conversion) : 在混...
  • jsh13417
  • jsh13417
  • 2014年04月16日 23:25
  • 1664
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:比较比较C++中的static_cast、dynamic_cast、reinterpret_cast类型转换方式
举报原因:
原因补充:

(最多只允许输入30个字)