gpt4 book ai didi

c++ - 为什么我要使用 dynamic_cast 强制转换为 void *?

转载 作者:IT老高 更新时间:2023-10-28 23:16:42 25 4
gpt4 key购买 nike

所以我正在阅读 dynamic_cast from "void *" 的答案尽管您不能从 void * 转换为 T * 一些响应指出可以转换 T *void *,但不要给出任何指示为什么你想这样做。

这只是可能的琐事,还是有可能有意义的情况?我考虑过可能是为了可读性或明确我们正在转换为 void *,但考虑到 dynamic_cast 的目的,它不太适合我。

就此而言,除了让 T * 隐式变为 void * 之外,还有什么理由去做吗?我已经看到不时使用 C 风格强制转换为 void * code> 指向一个指针或其他东西)。

最佳答案

首先,使用 dynamic_cast<void*>(x) 时你会得到一个指向最衍生对象的第一个字节的指针。只要x的静态类型是多态的。

这在少数情况下很有用,其中地址用作对象标识:

  • 您现在可以将指向同一对象的子对象的指针与指向不相关子对象的指针完全区分开来。
  • 您现在可以在不多次访问同一个对象的情况下遍历一些扭曲的图...可用于序列化

当然,这肯定不是日常使用,但在 C++ 中,内存地址是对象的事实上的标识符,因此从继承层次结构的任何部分访问它的机制肯定是对于那些少数边缘情况很有用。

关于c++ - 为什么我要使用 dynamic_cast 强制转换为 void *?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9475267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com