So this static_cast
代码是完全合法的:
int n = 13;
void* pn = static_cast<void*>(&n);
void** ppn = &pn;
但这必须做成一个reinterpret_cast
编译:
int n = 13;
int* foo = &n;
void** bar = static_cast<void**>(&foo);
如果我不更改它,我会收到错误:
错误 C2440:static_cast
: 无法转换自int **
to void **
注意:指向的类型是不相关的;转换需要reinterpret_cast
、C 风格转换或函数风格转换
所以我认为问题是“类型不相关”。但我还是不明白,从int*
to void*
他们怎么可能不相关int**
and a void**
?
int
与void
。同样适用于int**
and void**
所以它们不能使用转换static_cast
.
void*
然而,是special。任何数据指针类型(包括int*
) 可static_cast
into void*
并返回,尽管没有类型与之相关void
(更进一步,转换为void*
不需要强制转换,因为它是隐式的)。int*
没有这个属性,也没有void**
除此以外也没有任何其他指针void*
.
已授予的额外自由void*
有额外的限制。void*
不能间接,也不能与指针运算一起使用。这些限制之所以可能,是因为永远不可能有类型的对象void
。或者从相反的角度来看,物体void
由于这些限制而无法存在。
void**
不能给予这些自由,因为不能给予同样的限制。不能给予这些限制,因为void*
物体确实存在并且它们需要存在。如果我们不能间接或迭代void**
,那么我们就不能使用数组void*
例如。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)