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

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

將浮點數分配給結構的整數元素

將浮點數分配給結構的整數元素

Go
慕村9548890 2022-05-05 16:02:09
我正在參加巡回賽,我對 4/27 感到困惑(https://tour.golang.org/moretypes/4)package mainimport "fmt"type Vertex struct {    X int    Y int}func main() {    v := Vertex{1, 2}    p := &v    p.X = 1e9 // <- this line does not produce a type error    fmt.Println(v) // {1000000000 2} implicite conversion of int to float?}我希望在 JavaScript 中做到這一點,而不是在強類型語言中。我一定錯過了一些基本的東西。
查看完整描述

3 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

這一行:

 p.X = 1e9

是一個任務。Spec 對分配有以下要求:

在賦值中,每個值都必須可以分配給它所分配的操作數的類型......

以下可分配性規則涵蓋了上述分配:

  • x是一個無類型的常量 ,可由 type 的值表示T。

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


查看完整回答
反對 回復 2022-05-05
?
鴻蒙傳說

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。


查看完整回答
反對 回復 2022-05-05
?
米脂

TA貢獻1836條經驗 獲得超3個贊

Go 編程語言規范/轉換

轉換可能按字面意思出現在源代碼中,也可能由表達式出現的上下文暗示。

Go 編程語言規范/數字類型之間的轉換

  1. 將浮點數轉換為整數時,會丟棄小數(截斷至零)。

這里:

p.x = 1e9 // it's floating literal with implied conversion by context

https://golang.org/ref/spec#Conversions


查看完整回答
反對 回復 2022-05-05
  • 3 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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