Go 语言存在隐式类型转换?

57 天前
 assassing

忘了在哪本书上看到的例子:

package main

import "fmt"

func main() {
	// 不指定类型时为浮点数
	var a = 2e3
	fmt.Printf("%T: %v\n", a, a) // 输出:float64: 2000

	// 编译成功,因为 1.5e3 等于 1500 ,是一个整数
	var b int = 1.5e3
	fmt.Printf("%T: %v\n", b, b) // 输出:int: 1500
}

上面代码中,为什么 var b int = 1.5e3 能通过编译,难道科学计数法被视为算术表达式或常量表达式?不然我只能认为 Go 语言存在隐式类型转换了。

有请知道的大佬解答原因,还有没有类似的情况呢?

2159 次点击
所在节点    程序员
23 条回复
xuld
57 天前
@nagisaushio 你在偷换概念。

细读 go spec 和咬文嚼字是一个意思吗?

细读西游记 = 了解每个故事情节、掌握所有人物剧情、分析不同人的行为。

对西游记咬文嚼字 = 为什么唐僧从出发到西天取经,一路上吃的都是东方的食物,一点西方的食物都没有。
vx7298
57 天前
var i int=10.0
var i int=10.2
assassing
57 天前
@nagisaushio 现在认知是:用指数形式表示的数,是一个不定类型的常量,可能为整数也可能为浮点数。就和下面这种情况一样:

const c = 1.0
var d int = c

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1060942

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX