3 回答
TA贡献1859条经验 获得超6个赞
这一行:
p.X = 1e9
是一个任务。Spec 对分配有以下要求:
在赋值中,每个值都必须可以分配给它所分配的操作数的类型......
以下可分配性规则涵盖了上述分配:
1e9
是一个无类型的浮点常量,并且该值可以由一个类型的值int
精确表示,所以一切都很好。
如果它是一个类型化的常量,那将是一个编译时错误,例如
p.X = float64(1e9) // error: cannot use float64(1e+09) (type float64) as type int in assignment
因为上述可分配性规则将不适用,所有其他规则也不适用。
如果无类型浮点常量值不能用 type 的值表示,情况也是int
如此,例如在这些情况下:
p.X = 1e99 // error: constant overflows int p.X = 1.1 // error: constant 1.1 truncated to integer
TA贡献1865条经验 获得超7个赞
常量值由符文、整数、浮点数、虚数或字符串字面量表示,...
数字常量表示任意精度的精确值并且不会溢出。
常量可以有类型或无类型。文字常量 ... 是无类型的。
在变量声明中使用时,可以隐式地为常量赋予类型……。如果常量值不能表示为相应类型的值,则这是错误的。
type Vertex struct {
X int
Y int
}
v := Vertex{1, 2}
p := &v
p.X = 1e9 // <- this line does not produce a type error
1e9是一个无类型的数字常量,表示为浮点文字。
当无类型的数字常量1e9被分配给一个int变量 ( p.X, type Vertex {X int}) 时,它会int隐式地给定类型。1e9( 1,000,000,000) 可以表示为 type 的值int。
TA贡献1836条经验 获得超3个赞
Go 编程语言规范/转换:
转换可能按字面意思出现在源代码中,也可能由表达式出现的上下文暗示。
Go 编程语言规范/数字类型之间的转换
将浮点数转换为整数时,会丢弃小数(截断至零)。
这里:
p.x = 1e9 // it's floating literal with implied conversion by context
https://golang.org/ref/spec#Conversions
- 3 回答
- 0 关注
- 134 浏览
添加回答
举报