为了账号安全,请及时绑定邮箱和手机立即绑定

隐式类型转换常量与变量

隐式类型转换常量与变量

Go
慕莱坞森 2023-04-24 16:58:54
我遇到过这样一种情况,我在常量中有一些整数值并将其与math.Pi常量相乘,如下所示:func main() {    const a = 5    fmt.Printf("%v", a*math.Pi)}在执行时,它给出以下结果:15.707963267948966但是,当我将常量更改为变量 ( variable a)时,如下所示:func main() {    a := 5    fmt.Printf("%v", a*math.Pi)}编译时出现以下错误:constant 3.14159 truncated to integer据我所知,隐式数字类型转换在表达式的所有操作数都是常量时有效,但在其中任何一个变量时无效。但是为什么会这样呢?
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

它的发生是因为 Go 的无类型常量。在这两种情况下,您都没有明确指定类型。

在第一种情况下,您正在定义一个无类型常量(您也可以使用 定义一个有类型常量const a float64 = 5)。对于无类型常量,只有在需要类型的上下文中使用时才会推断出类型——即当您将它与 math.Pi 相乘时,编译器将“猜测”您想要在那里有一个浮点数,以及所有内容工作正常。

在第二种情况下,一个变量当然必须有一个类型,所以类型推断发生在声明变量的时候,因为你使用了“5”,编译器将“推断”出 int,并且将 int 和 float 相乘是在围棋中不可能。您可以使用 ega:=5.0var a float64 = 5将 a 声明为 float64,那么此代码也可以正常工作。


查看完整回答
反对 回复 2023-04-24
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信