gpt4 book ai didi

c++ - static_cast void* char* 与 static_cast void** char**

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:36 29 4
gpt4 key购买 nike

如果我执行以下操作,一切正常:

char* cp = "abc";
void* vp = NULL;
vp = static_cast<void*>(cp);//ok
cp = static_cast<char*>(vp);//ok

但下面不是:

char** cpp = &cp;
void** vpp = NULL;
vpp = static_cast<void**>(cpp);//error C2440: 'static_cast':
//cannot convert from 'char **' to 'void **'
cpp = static_cast<char**>(vpp);//error C2440: 'static_cast':
//cannot convert from 'void **' to 'char **'

有人可以向我解释为什么不允许使用第二个示例。请不要引用 C++ 标准作为你的整个答案,因为我已经看到引用它的答案,但我不明白它们的意思。我想了解为什么第二个示例不起作用(即,如果您能举一个危险的示例,那将是一个很大的帮助)。因为我不明白。对我来说,这两个例子都是指针。为什么额外的间接级别会有所不同?

最佳答案

A void *指针可以指向“任何东西”,将所有指针转换为 void * 是有效的, 并且从 void * 转换所有指针是有效的到其他类型。

然而,一个void **是一个指向 void * 的指针值(value)。还有一个 char **是指向 char * 的指针值(value)。这些类型不指向可相互转换的类型。如果您需要这样做,您可以使用 void **vpp = reinterpret_cast<void **>(cpp); ,但它“不安全”(你基本上是在告诉编译器“看,我知道我在做什么,所以就去做吧”,这可能不会像你实际期望的那样......)

关于c++ - static_cast void* char* 与 static_cast void** char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280814/

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