【发布时间】:2017-04-10 18:10:10
【问题描述】:
在“21 世纪 C”中,Ben Klemens 描述了 C 如何自动将有符号数转换为无符号数,例如比较表达式。 Go 是否有同样的危险行为,或者 Go 有不同的处理方式?
【问题讨论】:
标签: c go types unsigned signed
在“21 世纪 C”中,Ben Klemens 描述了 C 如何自动将有符号数转换为无符号数,例如比较表达式。 Go 是否有同样的危险行为,或者 Go 有不同的处理方式?
【问题讨论】:
标签: c go types unsigned signed
Go 中没有隐式转换。为了对两个不同类型的值进行比较或算术运算,您必须进行手动和显式类型转换。
a := 3 // numerical constant 3 defaults to int
b := uint(2)
c := a < b // compiler error
d := a < int(b) // OK
【讨论】:
Go 仅使用 explicit type conversions 进行所有操作,包括比较。
var a uint64
var b int64
a = 1
b = 1
if a == b {
fmt.Println("Equal")
}
这个sn-p会报错:
tmp/sandbox428200464/main.go:13:无效操作:a == b(uint64 和 int64 类型不匹配)
要进行比较,您必须将变量显式转换为相同的类型:
if int64(a) == b {...}
所以,肯定是的,如果有人能这么说,那是固定的。
Playgound 用于 sn-p。
【讨论】: