c++ - 将基指针转换为派生指针有任何危险吗?

标签 c++ inheritance pointers casting

我一直避免使用 C++ 转换(static_castconst_castdynamic_cast [我也避免使用 RTTI],等等),因为我认为它们因为浪费打字而且我从来没有看到任何优势,所以我只使用 C 风格的转换。

我的问题是,如果你有一个继承层次结构和一个指向基类型的指针,你能否安全地将基指针转换为具有 C 风格转换的派生指针(假设你以某种方式绝对确定基指针指向到派生类型的实例),而不会在幕后发生会导致看似莫名其妙的故障的事情?

我问这个是因为我在另一个问题的评论之一中读到,使用从基类型到派生类型的 C 样式转换不会“调整指针”或类似的东西。我会再次尝试找到准确的评论。

最佳答案

使用 static_castdynamic_cast 进行转换可确保某种安全性。
如果转换无效,static_cast 会给您一个编译时错误,
dynamic_cast 为引用抛出异常或在运行时无效转换的情况下返回空指针。

因此,它们比 c 型转换更好,主要是因为它们提供了安全性。

如果您绝对确定转换是有效的,即使是 C 风格的转换也是如此,但是最好使用提供安全性的语言而不是我们自己管理它(因为我们不需要)。

关于c++ - 将基指针转换为派生指针有任何危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7200154/

相关文章:

c++ - Visual Studio "The debug worker process exited unexpectedly"每次运行都在同一个断点上

c++ - 使用 C++ 通过继承组织树复制

swift - 绕过自动初始化器继承规则 Swift

c++ - 没有指针的递归结构? (霍夫曼)

c - 进程退出并返回值 255,带有指向结构的指针

c++ - 为什么我在 MinGW 中不需要标志 -lm 但在 Linux 中我明确需要它?

c++ - gcc 在一台计算机上编译时出错,但在另一台计算机上编译时出错

c++ - 返回指针(数组)时可能发生内存泄漏 (C++)

c++ - 如何正确显示一个二维字符串数组?

java - 组合与继承(如何理解 Java 中的 Thinking)