亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

隱式類型轉換常量與變量

隱式類型轉換常量與變量

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 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號