【发布时间】:2015-07-10 19:04:29
【问题描述】:
在Python C Module - Malloc fails in specific version of Python 的第一条评论中,@user694733 提到将char** 转换为void** 是无效的。我阅读了Invalid conversion from Foo** to void** - why is implicit type conversion allowed to void* but not to void**? 和http://c-faq.com/ptrs/genericpp.html,但有对标准的引用,但没有实际示例,在这种情况下,这可能是不正确的,从而导致错误。考虑例如void** 到 double** 或反之亦然,是否有可能出错的情况?为什么(从技术上讲,不仅仅是因为它是 UB)?
【问题讨论】:
-
请清楚地说明问题,而不是强迫任何愿意解决您的请求的人,阅读 2-3 个额外的帖子。
-
强制转换和
void*的行为在 C 和 C++ 中是不同的。请选择一个。 -
首先,C 和 C++ 中的术语“转换”是指显式转换。从
T **到void **的显式转换通常是有效的。其次,对应转换的潜在问题与著名的FAQ条目中描述的T ** -> const T **转换的底层结构完全相同:isocpp.org/wiki/faq/const-correctness#constptrptr-conversion -
演员表无效;任何对象指针类型都可以转换为任何其他对象指针类型,如果存在对齐错误,则只有UB,这在这种情况下不太可能(大多数系统具有相同对齐要求的所有指针)