我正在阅读 map.go
以更深入地了解 map
在 Go 中的实现方式。
我对这段 code 的作用感到困惑:
func (b *bmap) overflow(t *maptype) *bmap {
return *(**bmap)(add(unsafe.Pointer(b), uintptr(t.bucketsize)-sys.PtrSize))
}
谁能帮我理解 *(**bmap)
在这里做什么?提前致谢。 最佳答案
如果 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(...)
表达式返回的任何内容转换为 **bmap
类型的值。
最后 *(**bmap)(...)
通过一个指针取消引用该转换的结果,为您留下一个 *bmap
类型的值。
关于go - 这是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63089509/