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

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

Go 中別名類型之間的轉換是否會創建副本?

Go 中別名類型之間的轉換是否會創建副本?

Go
藍山帝景 2021-11-01 16:52:48
例子:type MyString string var s = "very long string"var ms = MyString(s)var s2 = string(s)是ms或s2的完整副本s(就像用 完成的那樣[]byte(s))?或者它們只是一個字符串結構副本(將實際值保存在指針中)?如果我們將它傳遞給一個函數怎么辦?例如:func foo(s MyString){  ...}foo(ms(s))  // do we copy s here?
查看完整描述

1 回答

?
呼如林

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

規格: 轉換:

特定規則適用于數字類型之間或與字符串類型之間的(非常量)轉換。這些轉換可能會改變表示x并產生運行時成本。所有其他轉換僅更改類型,而不更改x.

因此,如果在自定義類型的基礎類型之間進行轉換,則不會進行復制。

當您將值傳遞給函數或方法時,會生成并傳遞一個副本。如果將 a 傳遞string給函數,則只會string復制和傳遞描述 的結構,因為strings 是不可變的。

如果你傳遞一個切片(切片也是描述符)也是如此。傳遞切片將制作切片描述符的副本,但它將引用相同的底層數組。


查看完整回答
反對 回復 2021-11-01
  • 1 回答
  • 0 關注
  • 211 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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