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

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

++ 是 += 1 的語法糖嗎?

++ 是 += 1 的語法糖嗎?

Go
收到一只叮咚 2022-11-08 16:31:21
據(jù)我了解,索引地圖會返回地圖值的副本??紤]到這一點(diǎn),請考慮以下代碼:package mainimport "fmt"func main() {    m := map[string]int{"xxx": 100}    m["xxx"]++    fmt.Println(m["xxx"]) // prints 101}上面的代碼打印101,而我的預(yù)期100。我的推理是m["xxx"]返回分配給鍵的值的副本"xxx"(即,100),并且操作員++遞增該值的副本,但這不會影響存儲在映射中的原始值——只有副本發(fā)生了變化。但是,考慮到我們通過將鍵放在括號內(nèi)并使用=來指定值(即m[key] = value)來為映射鍵分配值。然后,如果m["xxx"]++被m["xxx"] += 1編譯器翻譯成 - 這反過來,相當(dāng)于m["xxx"] = m["xxx"] + 1- 這將解釋上面代碼的結(jié)果。我的問題是增量運(yùn)算符 ( ++) 是否是加法賦值 ( ) 的語法糖+= 1。否則,我錯過了什么?
查看完整描述

2 回答

?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個贊

“我的理由是 m["xxx"] 返回值的副本” ——我認(rèn)為這不是一個公平的假設(shè)。索引表達(dá)式下的規(guī)范僅說明以下內(nèi)容:

表單的主要表達(dá)式表示[...] 映射的a[x] 元素ax

如果地圖包含一個帶有 key 的條目x,a[x] 是帶有 key 的地圖元素x

動詞“表示”和“是”可以說并不意味著副本。僅當(dāng)您將索引表達(dá)式的結(jié)果分配給變量時才會進(jìn)行復(fù)制。

地圖索引表達(dá)式根本不可尋址,因此您無法記憶地圖中存儲的值的別名。

至于增量運(yùn)算符是否++是語法糖+= 1,規(guī)范明確指出

以下賦值語句在語義上是等價的:

IncDec 語句分配
x++ x += 1
x-- x -= 1

Soop++與 具有相同的含義op += 1,并且使用 keya[x]++遞增a[x]“表示/是”映射元素的操作數(shù)x。


查看完整回答
反對 回復(fù) 2022-11-08
?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個贊

語言規(guī)范說 ++/-- 運(yùn)算符應(yīng)該使用映射索引表達(dá)式作為操作數(shù)。

https://go.dev/ref/spec#IncDec_statements

“++”和“--”語句通過無類型常量 1 遞增或遞減它們的操作數(shù)。與賦值一樣,操作數(shù)必須是可尋址的或映射索引表達(dá)式。

未指定應(yīng)如何實(shí)現(xiàn)該功能,因此在不同編譯器或同一編譯器的不同版本之間可能會有所不同。


如果你搜索cmd/compile/internal你的 Go 安裝目錄,如果我沒記錯的話,這是 Go 編譯器的源代碼,你會發(fā)現(xiàn)很多行似乎證實(shí)了你的猜測。但是,我對代碼的了解還遠(yuǎn)遠(yuǎn)不夠,無法提供結(jié)論性的答案。

示例:

我從未看過的規(guī)范的gccgo實(shí)現(xiàn)可能會也可能不會以同樣的方式執(zhí)行 IncDec。


查看完整回答
反對 回復(fù) 2022-11-08
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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