当它危险的时候仍然在使用
可能重复:
当两个链接的static_cast可以完成它的工作时,为什么我们在C ++中使用reinterpret_cast?
我已经建议我不应该在指针转换指针的情况下使用reinterpret_cast或const_cast。 只有dynamic_cast应该使用。因为其他演员将来可能会产生问题。 所以我的问题是为什么reinterpret_cast或其他强制转换已经从c ++标准中删除。
因为有时候你需要一个能够完成reinterpret_cast
的演员reinterpret_cast
。 至于dynamic_cast
,我几乎从不使用这个演员; 这只适用于从父类型转换为更多派生类型。 大多数情况下,我可以证明我正在使用哪种子类型,并使用static_cast
。 我还使用static_cast
进行编译时类型转换,例如从signed到unsigned整数。
static_cast
,而不是dynamic_cast
,是最常见的类型。 如果您的设计过于依赖dynamic_cast
,那么这是一种代码异味,表明您的类层次结构在大多数情况下都会违反LSP。
他们很危险,但有时你需要他们。
C ++不知道去除对新用户有危险的构造。 我们会让你与那些剪刀一起运行(同时吃蛋糕)。
是什么让他们很好,是危险的代码突出,所以很容易发现。 因此,当人们进行代码审查时,他们可以迅速发现危险的东西,并加入更多检查的细节。
在现实世界中,您经常需要以编译器/运行时无法验证的方式投射指针。 例如,在pthread中,您将一个void *传递给新线程的启动例程。 有时候这个参数实际上是一个类? 编译器无法告诉。 这是那些“现实生活”问题之一。
顺便说一句,我发现自己很少使用dynamic_cast。 我主要用于catch块中的异常类型的抓取。
链接地址: http://www.djcxy.com/p/28753.html上一篇: cast still is in use when it dangerous
下一篇: cast mostly useless?