繁体   English   中英

Go会修复或共享C的危险隐式->无符号转换吗?

[英]Does Go fix or share C's hazardous implicit -> unsigned conversion?

本·克莱门斯(Ben Klemens)在《 21世纪C》中描述了C如何在比较表达式中自动将有符号数转换为无符号数。 Go是否具有相同的危险行为,还是Go采取不同的处理方式?

Go中没有隐式转换。 为了比较或对具有不同类型的两个值进行算术运算,必须执行手动和显式类型转换。

a := 3          // numerical constant 3 defaults to int
b := uint(2)
c := a < b      // compiler error
d := a < int(b) // OK

Go仅对所有操作(包括比较)使用显式类型转换

var a uint64
var b int64

a = 1
b = 1
if a == b {
    fmt.Println("Equal")
}

此代码段将导致错误:

tmp / sandbox428200464 / main.go:13:无效操作:a == b(uint64和int64类型不匹配)

要进行比较,必须将变量显式转换为相同类型:

if int64(a) == b {...}

因此,绝对可以 ,如果可以这样说,它是固定的。

片段的Playgound

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM