这是什么意思?

hyz*_*hyz 3 hashmap go

我正在阅读map.go以更深入地了解如何map在 Go 中实现。

我对这段代码的作用感到困惑:

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

谁能帮我理解*(**bmap)这里有什么?提前致谢。

mko*_*iva 10

如果T是类型,则*T也是类型,特别是指针类型,既然*T是类型,则**T也是类型。https://golang.org/ref/spec#Pointer_types

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

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


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

然后(**bmap)(add(...))是将add(...)表达式返回的任何内容转换为 type 值的转换**bmap

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