第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C++ 中的常量引用和 Golang 中的等價(jià)物

C++ 中的常量引用和 Golang 中的等價(jià)物

Go
飲歌長(zhǎng)嘯 2022-01-04 10:48:05
我是從 C++ 世界和 C++ 開始的,通常當(dāng)您關(guān)心性能并且不需要更改對(duì)象時(shí),您可以使用常量引用傳遞它void func(const std::string& str)在這種情況下,字符串未復(fù)制且無法在函數(shù)中修改。我知道,在 Go 中有兩種傳遞對(duì)象的方法:按值,然后你不能修改(或者實(shí)際上你可以但沒有意義)它,但它非常消耗內(nèi)存通過指針,這從內(nèi)存方面來說是好的,但是您可以修改對(duì)象。那么,最好的方法是什么?即使您不想修改它,也總是通過指針傳遞對(duì)象,因?yàn)樗欤炕蛘哂幸恍┚幾g器優(yōu)化,即使您按值發(fā)送它有時(shí)也會(huì)作為參考發(fā)送?
查看完整描述

2 回答

?
慕少森

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊

Go 中沒有直接的等價(jià)物。

  1. 如果對(duì)象很大(大于 32-64 字節(jié))和/或需要更改,則通過指針傳遞。

  2. 如果上述規(guī)則不適用,則按值傳遞。

  3. 映射/通道/切片是引用類型,它們包含內(nèi)部指針,因此您不需要通過指針傳遞它們,除非您計(jì)劃可能傳遞 nil 或想要附加(不修改已包含的元素)到切片。

例子:

func doMap(m *map[string]string) {

    if *m == nil {

        *m = map[string]string{}

    }

    .....

}


查看完整回答
反對(duì) 回復(fù) 2022-01-04
?
至尊寶的傳說

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊

對(duì)于可以*string用作參數(shù)的字符串,您似乎無法更改原始字符串:


package main


import (

    "fmt"

    )


func t1(s *string) {

    fmt.Println("Inside before: %s", *s)

    s2 := "tEsT1"

    s = &s2

    fmt.Println("Inside after 1: %s", *s)

}


func main() {

    var s = "test"

    fmt.Println("Ourside before: %v", s)

    t1(&s)

    fmt.Println("Ourside  after: %v", s)

}

印刷:


Ourside before: %v test

Inside before: %s test

Inside after 1: %s tEsT1

Ourside  after: %v test

對(duì)于復(fù)雜的結(jié)構(gòu),通過引用和阻止編輯將更困難或不可能。


如果我弄錯(cuò)了,請(qǐng)糾正我(我只是在學(xué)習(xí) Go)。


查看完整回答
反對(duì) 回復(fù) 2022-01-04
  • 2 回答
  • 0 關(guān)注
  • 199 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)