gpt4 book ai didi

c++ - 为什么将 char**(或任何 T**)转换为 void** 无效?

转载 作者:太空狗 更新时间:2023-10-29 19:43:23 25 4
gpt4 key购买 nike

在对 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)?

最佳答案

如果允许这样做,就会在类型系统中产生一个漏洞:

T* ptr;
void **vptr = &ptr; // &ptr is of type T**
int value;
*vptr = &value; // &value is int*, can be converted to void*

此时,根据类型系统,ptr 是指向 T 的指针,它指向 value,它是 整数。虽然该语言允许您绕过类型系统,但您必须明确请求它。隐式转换旨在避免此类问题。

关于c++ - 为什么将 char**(或任何 T**)转换为 void** 无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978561/

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