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

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

在支持循環(huán)和功能的語言中使用“ goto”是否有優(yōu)勢?如果是這樣,為什么?

在支持循環(huán)和功能的語言中使用“ goto”是否有優(yōu)勢?如果是這樣,為什么?

一只萌萌小番薯 2019-10-05 11:12:11
長期以來,我一直認(rèn)為,goto如果可能,永遠不要使用。前幾天在閱讀libavcodec(用C編寫)時,我注意到它的多種用法。使用goto支持循環(huán)和功能的語言是否有優(yōu)勢?如果是這樣,為什么?
查看完整描述

3 回答

?
MMMHUHU

TA貢獻1834條經(jīng)驗 獲得超8個贊

我知道有一些使用“ goto”語句的原因(有些已經(jīng)講過):


干凈地退出功能


通常在函數(shù)中,您可能會分配資源,并且需要在多個位置退出。程序員可以通過將資源清除代碼放在函數(shù)的末尾來簡化其代碼,并且該函數(shù)的所有“退出點”都將進入清除標(biāo)簽。這樣,您不必在函數(shù)的每個“退出點”都編寫清除代碼。


退出嵌套循環(huán)


如果您處于嵌套循環(huán)中并且需要脫離所有循環(huán),那么goto可以比break語句和if-checks更加簡潔明了。


低級性能改進


這僅在性能至關(guān)重要的代碼中有效,但是goto語句執(zhí)行得非???,并且在遍歷函數(shù)時可以為您提供幫助。但是,這是一把雙刃劍,因為編譯器通常無法優(yōu)化包含gotos的代碼。


請注意,在所有這些示例中,gotos僅限于單個函數(shù)的范圍。


查看完整回答
反對 回復(fù) 2019-10-05
?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

由于goto使程序流程難以進行推理1(又稱“意大利面條代碼”),goto因此通常僅用于補償缺少的功能:使用goto可能實際上是可以接受的,但前提是該語言沒有提供更結(jié)構(gòu)化的變體來獲取相同的目標(biāo)。以Doubt為例:

我們使用goto的規(guī)則是goto可以跳轉(zhuǎn)到函數(shù)中的單個出口清理點。

這是正確的-但前提是該語言不允許使用清理代碼(例如RAII或finally)進行結(jié)構(gòu)化異常處理,這樣做的效果更好(因為它是專門為此目的而構(gòu)建的),或者在有充分理由不這樣做的情況下使用結(jié)構(gòu)化異常處理(但除非是非常低的級別,否則您永遠不會遇到這種情況)。

在大多數(shù)其他語言中,唯一可接受的用法goto是退出嵌套循環(huán)。甚至在那里,將外部循環(huán)提升為自己的方法并改用它幾乎總是更好的選擇return。

除此之外,這goto表明沒有對特定代碼進行足夠的思考。


1支持的現(xiàn)代語言goto實現(xiàn)了一些限制(例如,goto可能不會跳入或跳出功能),但問題從根本上保持不變。

順便說一句,其他語言功能當(dāng)然也是如此,最明顯的例外是。而且通常有嚴(yán)格的規(guī)則來僅在指示的地方使用這些功能,例如不使用異常來控制非異常程序流的規(guī)則。


查看完整回答
反對 回復(fù) 2019-10-05
  • 3 回答
  • 0 關(guān)注
  • 749 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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