C ++类型转换

C++ type casting

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
When should static_cast, dynamic_cast and reinterpret_cast be used?

直到几天前,我一直在C++中使用C风格的类型转换,因为它看起来很好。我最近发现在C++中使用C是非常糟糕的。

我以前从未真正使用过C++,所以我想知道有没有人能告诉我(最好用自己的话)StasyType、RealTytQuask和CistySCAST之间的区别是什么?

我知道Const-Cast从某些东西中删除了一个"Const",但我不确定它们之间的区别是什么,以及在不同情况下需要使用什么。


说"C型铸造是坏的"是一种极端,它本身就和使用C型铸造一样坏。

"新"C++风格转换应该使用的区域是:分层模型(UpcCasts、下拉、交叉)、常量正确性转换和重新解释转换。对于算术铸型,C型铸件的工作非常精细,不会造成危险,这就是为什么它们可以安全地用于C++代码的原因。实际上,我建议使用C样式的强制转换作为算术强制转换-只是为了使算术强制转换看起来不同于其他强制转换类型。


  • StasyType是当程序员知道对象的类型和/或想让编译器知道的时候,在编译时执行一个强制转换的标准C++方式。
  • 动态"强制转换"类似于"(T)obj",在运行时检查强制转换。
  • reinterpret_cast用于在不同对象之间强制转换,而不进行运行时检查。
  • const-cast通过删除const和volatile限定符显式转换为相同的类型。

  • static_cast(e-of-TYPE2)是一种安全的铸件。这意味着有一个从类型2到类型1的转换。

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

    有一件事,无论是static_cast还是reinterpret_cast都不允许做,那就是删除一个常量。也就是说,如果你有一个const char *并且需要把它铸造到char *上,static_castreinterpret_cast都不允许这样做。相反,const_cast是您的朋友;const_cast用于从类型中删除const修饰符。


    静态类型-只是C类型的类型,例如(int)1.000。它不需要任何代价,也不会失败。但它的唯一价值是句法上的糖分(它对在编辑器中搜索很有用)

    ReCurtTyCase-是(Value*)的C++等价物。它会在你脸上爆炸。用这个命令编译器只做这个,其他程序员要非常小心。

    动态u cast是一个更安全的版本,如果无法完成转换,则返回空值。这有一个小的运行时成本。

    另请参见何时应使用静态u cast、动态u cast、const u cast和重新解释u cast?