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

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

轉到:關于結構數組初始化的困惑

轉到:關于結構數組初始化的困惑

Go
嚕嚕噠 2022-09-26 15:30:16
我的困惑顯示在以下代碼片段中:type Ex struct{    A,B int}a := []Ex{Ex{1, 2}, Ex{3, 4}}     //it works, and I understand itb := []*Ex{&Ex{1, 2}, &Ex{3, 4}}   //it works, and I understand itc := []Ex{{1, 2}, {3, 4}}   //it works, and I don't understand itd := []*Ex{{1, 2}, {3, 4}}   //it works, and I don't understand ite := []*Ex{{1, 2}, &Ex{3, 4}}   //it works, and I don't understand it最讓我困惑的是,兩者都可以很好地工作。為什么可以同時用于初始化對象和指針?c := []Ex{{1, 2}, {3, 4}}d := []*Ex{{1, 2}, {3, 4}}{1, 2}我發現了同樣的問題,有人回答了:如果 是像 *Ex 或 *Track 這樣的指針,它也會自動正確初始化:但我期待一個更深層次的解釋。是否有關于這個問題的官方文件?我有一個很好的C/C++基礎,但是一個Golang新手。期待您的回答,我提前感謝您。
查看完整描述

1 回答

?
FFIVE

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

規范:復合文字:

在數組、切片或映射類型的復合文本中,本身就是復合文本的元素或映射鍵的元素或映射鍵可以與 的元素或鍵類型相同,則可能會省略相應的文本類型。同樣,當元素或鍵類型為 時,作為復合文本地址的元素或鍵可能會省略 。TT&T*T

這解釋了案例,以及 。cde

c := []Ex{{1, 2}, {3, 4}}
d := []*Ex{{1, 2}, {3, 4}}
e := []*Ex{{1, 2}, &Ex{3, 4}}

所有這些都是切片復合文本,并且元素也使用復合文本提供。因此,引用的部分適用。根據規范,您可以從元素的復合文本中省略 元素類型(如果它是指針類型,也可以省略運算符),在這種情況下,它是從切片的元素類型(“外部”復合文本)推斷出來的。T&

如果為 ,則被解釋為復合文字。c{1, 2}Ex{1, 2}

在 的情況下,被解釋為 ,即取復合文字的地址。d{1, 2}&Ex{1, 2}Ex{1, 2}

這同樣適用于大小寫(因為切片的元素類型是相同的)。e

這是對語言規范允許的復合文字的簡化。當從切片類型中知道所有元素類型時,對所有元素重復元素類型是多余的,會使代碼更長且更難閱讀。


查看完整回答
反對 回復 2022-09-26
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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