C ++类型转换

可能重复:
什么时候应该使用static_cast,dynamic_cast和reinterpret_cast?

直到前几天,我总是在C ++中使用C风格类型转换,因为它似乎很好。 我最近发现在C ++中使用C非常糟糕..

我以前从来没有真正使用C ++投射,所以我想知道是否有人可以告诉我(用他们自己的话来说)static_cast,reinterpret_cast和const_cast之间的区别是什么?

const_cast我知道从某个东西中删除了一个“const”,但我不确定它们之间的区别,以及我需要在不同情况下使用的东西。


说“C铸造不好”是一种极端,它本身就像使用C型铸造一样糟糕。

应该使用“新”C ++风格转换的区域是:分层转换(向上转换,向下转换,交叉转换),常量正确性转换和重新解释转换。 对于算术演员而言,C型演员阵容工作得非常好,并且没有危险,这就是他们可以安全地用于C ++代码的原因。 事实上,我实际上会推荐使用专门的C风格演员作为算术演员 - 只是为了使算术演员看起来与其他演员类型不同。


static_cast<TYPE>(e-of-TYPE2)是一个安全的演员。 这意味着有从TYPE2到TYPE1的转换。

reinterpret_cast接近C剧组,它允许几乎任何转换(有一些限制)。 编译器期望您知道类型转换是正确的。

static_castreinterpret_cast都不允许做的一件事就是删除一个const。 IE浏览器如果你有一个const char *并且需要将它转换为char * ,那么static_castreinterpret_cast都不会允许。 相反, const_cast是你的朋友; const_cast用于从类型中删除const修饰符。


  • 当编程人员知道对象的类型和/或想让编译器知道时,static_cast是标准的c ++方法,用于在编译时进行强制转换。
  • dynamic_cast就像'(T)obj',在运行时检查转换。
  • reinterpret_cast用于在不进行运行时检查的情况下在不同对象之间进行投射。
  • 通过删除const和volatile限定符,const_cast显式转换为相同的类型。
  • 链接地址: http://www.djcxy.com/p/28441.html

    上一篇: C++ type casting

    下一篇: cast<int>(x) instead of (int)x?