是否以任何方式构建一个指向派生指针的基指针?

Set*_*gie 3 c++ inheritance pointers casting

我一直避免C++类型转换(static_cast,const_cast,dynamic_cast[我也避免RTTI],等等),因为我认为他们是打字的浪费,我从来没有见过任何优势,所以我用C-风格的转换完全.

我的问题是,如果你有一个继承层次结构和一个指向基类型的指针,你可以安全地使用C风格的强制类型转换为派生指针的基本指针(前提是你绝对确定基指针指向一个实例衍生类型)没有在幕后发生会导致看似无法解释的失败的事情?

我问这个是因为我在另一个问题的评论中读到,使用从基类到派生类型的C风格转换不会"调整指针"或类似的东西.我会再次尝试找到确切的评论.

Alo*_*ave 7

使用static_castdynamic_cast铸造可确保某种安全性.
static_cast如果转换为无效,则为您提供编译时错误;如果
dynamic_cast在运行时无效转换,则抛出References的异常或返回空指针.

因此,它们比c型铸造更好,主要是因为它们提供的安全性.

如果你完全确定转换是有效的,即使是c风格的转换只是做同样的事情,但最好使用提供的语言安全而不是自己管理它(因为我们不需要).