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

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

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

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

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

3 回答

?
MMMHUHU

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

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


干凈地退出功能


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


退出嵌套循環(huán)


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


低級性能改進(jìn)


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


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


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

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

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

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

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

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

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


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

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


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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