“非类型化的常量索引给定类型 int”是什么意思?

Go 规范给出了索引表达式的规则:a[x]

如果不是地图:a

  • 索引 x 必须是整数类型或非类型化常量

  • 常量索引必须是非负的,并且可由 int 类型的值表示

  • 非类型化的常量索引被指定为 int 类型

  • 如果 0 <= x < len(a),则索引 x 在范围内,否则超出范围

第三条规则(非类型化的常量索引给定类型 int)究竟是什么意思?有效的表达式是否与该规则相矛盾?a[1.0]


犯罪嫌疑人X
浏览 81回答 2
2回答

白板的微信

运行时使用的每个值都必须具有类型。如果使用非类型化常量,它将转换为类型化值,如以下示例所示:fmt.Printf("%T&nbsp;%v",&nbsp;1,&nbsp;1)1是一个非类型化常量,但当传递给 时,它必须转换为类型化值。在上面的示例中,将使用其默认类型,即 ,因此上面的示例打印 。fmt.Printf()intint 1非类型化的常量索引被指定为类型int这意味着,如果对非类型化索引使用常量值(它没有类型),则在将常量转换为类型化值时将使用常量值。int例如:s&nbsp;:=&nbsp;[]int{1,&nbsp;2,&nbsp;3} fmt.Println(s[1])此处,非类型化常量用作索引,因此它将被转换/用作 。1int一个反例:fmt.Println(s[int32(1)])此处使用类型化值 进行索引。这是有效的,因为它是整数类型。sint32(1)int32该规则只是说,如果您使用非类型化常量,那么它将被指定为类型,而不是例如。intint32这在使用整数文本时似乎很明显,但在使用其他类型的文本(如符文文本)时则不然。以下内容也有效:fmt.Println(s['\x00'])上面的示例使用符文文本作为索引,该索引也是一个非类型化常量,但它具有不同的默认类型。符文文本的默认类型是 的别名。引用的索引规则指出,在这种情况下,索引将是类型而不是 。'\x00'runeint32intint32

一只斗牛犬

事实并非如此。 并且是相同的数字(在数学上),因此可以为无类型化常量指定类型。1.011.0int但是,如果您尝试指定 ,您将收到一个错误,因为它不是整数。a[1.5]1.5操场
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go