簡體   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