瓦特语在golang中是什么意思?

hyz:

我正在阅读map.go,以更深入地了解mapGo中的实现方式。

我对这段代码的功能感到困惑

func (b *bmap) overflow(t *maptype) *bmap {
    return *(**bmap)(add(unsafe.Pointer(b), uintptr(t.bucketsize)-sys.PtrSize))
}

谁能帮助我了解*(**bmap)这里的内容?提前致谢。

mkopriva:

If T是一个类型,那么*T它也是一个类型,特别是指针类型,并且由于*T是类型,那么**T它也是一个类型。https://golang.org/ref/spec#Pointer_types

如果x是产生值的表达式,则*x是指针间接寻址或指针取消引用。https://golang.org/ref/spec#Address_operators

如果if T是类型,并且x是表达式,则T(x)是转换。https://golang.org/ref/spec#Conversions


类型**bmap也是如此,特别是“指向指针的指针”类型。bmap

然后(**bmap)(add(...))是一个转换,它将add(...)表达式返回的任何值转换为type的值**bmap

最后*(**bmap)(...),通过一个指针取消对该转换的结果的引用,为您保留type的值*bmap

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章