我一直避免使用 C++ 转换(static_cast
、const_cast
、dynamic_cast
[我也避免使用 RTTI],等等),因为我认为它们因为浪费打字而且我从来没有看到任何优势,所以我只使用 C 风格的转换。
我的问题是,如果你有一个继承层次结构和一个指向基类型的指针,你能否安全地将基指针转换为具有 C 风格转换的派生指针(假设你以某种方式绝对确定基指针指向到派生类型的实例),而不会在幕后发生会导致看似莫名其妙的故障的事情?
我问这个是因为我在另一个问题的评论之一中读到,使用从基类型到派生类型的 C 样式转换不会“调整指针”或类似的东西。我会再次尝试找到准确的评论。
最佳答案
使用 static_cast
或 dynamic_cast
进行转换可确保某种安全性。
如果转换无效,static_cast
会给您一个编译时错误,
dynamic_cast
为引用抛出异常或在运行时无效转换的情况下返回空指针。
因此,它们比 c 型转换更好,主要是因为它们提供了安全性。
如果您绝对确定转换是有效的,即使是 C 风格的转换也是如此,但是最好使用提供安全性的语言而不是我们自己管理它(因为我们不需要)。
关于c++ - 将基指针转换为派生指针有任何危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200154/