C ++类型转换

Bra*_*rad 5 c++ casting

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

直到几天前,我一直在C ++中使用C样式类型转换,因为它似乎工作良好。我最近发现在C ++中使用C是非常糟糕的..

我以前从未真正使用过C ++强制转换,所以我想知道是否有人可以告诉我(最好用自己的话说)static_cast,reinterpret_cast和const_cast之间的区别是什么?

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

Mar*_*ett -2

static_cast - 只是 c 转换,例如。(整数)1.000。它不需要任何成本,也不会失败。但它唯一的价值是语法糖(它对于在编辑器中搜索很有用)

reinterpret_cast - 是 (void*) 的 C++ 等价物。它可能会在你脸上爆炸。用它来告诉编译器就这样做,而其他程序员要非常小心。

Dynamic_cast 是一个更安全的版本,如果转换无法完成,它会返回 null。这具有很小的运行时间成本。

另请参见何时应使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?