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_cast
和reinterpret_cast
都不允许做的一件事就是删除一个const。 IE浏览器如果你有一个const char *
并且需要将它转换为char *
,那么static_cast
和reinterpret_cast
都不会允许。 相反, const_cast
是你的朋友; const_cast
用于从类型中删除const修饰符。
上一篇: C++ type casting