我正在阅读map.go
,以更深入地了解map
Go中的实现方式。
我对这段代码的功能感到困惑:
func (b *bmap) overflow(t *maptype) *bmap {
return *(**bmap)(add(unsafe.Pointer(b), uintptr(t.bucketsize)-sys.PtrSize))
}
谁能帮助我了解*(**bmap)
这里的内容?提前致谢。
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] 删除。
我来说两句