【发布时间】:2011-04-03 20:12:40
【问题描述】:
在 C 和/或 C++ 中:将 int 强制转换为 void 指针并再次返回 int 是否安全?
基于问题“C++: Is it safe to cast pointer to int and later back to pointer again?”。
【问题讨论】:
-
我希望人们会选择一种语言来提出这样的问题。您不会看到有人问:“如何在 Java 或 C++ 中检查 null 的引用?”为什么人们坚持要问这些关于 C 和 C++ 的问题?他们都使用 { 所以必须相同?
-
嗯....在这种情况下,C 和 C++ 在我所使用的实现中是相同的,但我自己的烦恼都是一样的。
-
我不认为它们是一样的。你需要考虑C中的指针大小吗?在 C++ 中,您有各种不同类型的指针,它们的大小可以不同,而 void* 大到可以容纳任何指针。因此,将 int 转换为 void* 与将 int 转换为 int* 或其他任何内容相比,不太可能丢失信息。我不记得在 C 中是这种情况,但我承认自从我还是新手以来就没有使用过它。
-
@Noah Roberts:你错了。在 C++ 中,您可以拥有不保证适合 void* 的指向成员的指针。这忽略了标准无法保证的实际新自定义指针类型。
-
是的,我说错了。在 C++ 中,任何 T* 都可以放入 void* 中,而并非所有 T1* 都可以放入 T2* 中,反之亦然。我不记得 C 有这个。