亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解goto語(yǔ)句的替代實(shí)現(xiàn)方式分析

 更新時(shí)間:2013年05月23日 11:14:18   作者:  
本篇文章是對(duì)goto語(yǔ)句的替代實(shí)現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
曾幾何時(shí),goto是多么的讓牛人綻放他們高超的精湛技術(shù)
曾幾何時(shí),goto又變成了萬(wàn)惡之首
曾幾何時(shí),goto只在教科書中的示例才會(huì)出現(xiàn)
有太多的理由不讓用goto,但有時(shí),我們又想使用goto的功能,怎么辦?
用try/catch/finally便可實(shí)現(xiàn)同等于goto的功能,來(lái)看二個(gè)示例:
復(fù)制代碼 代碼如下:

try {
      // operation one
      if (failed) {
            throw Exception;
      }
      // operation two
      if (failed) {
            throw Exception;
      }
      // operation three
      if (failed) {
           throw Exception;
      }
} catch (Exception e) {
      // do something when cases failed
}

和:
復(fù)制代碼 代碼如下:

try {
     // operation one
     if (failed) {
         return;
     }
     // operation two
     if (failed) {
         return;
     }
      // operation three
      if (failed) {
          return;
      }
} finally {
      // do something when failed
}

以上二段都等同于:
復(fù)制代碼 代碼如下:

       // operation one
       if (failed) {
           goto when_failed;
       }
       // operation one
       if (failed) {
           goto when_failed;
       }
       // operation one
       if (failed) {
           goto when_failed;
       }
when_failed:
       // do something when failed

用異常的方式有些暴力,但確實(shí)能正確的幫助實(shí)現(xiàn)類似goto的功能;用return和finally雖不是很暴力,但是比較難控制,因?yàn)樯婕暗絩eturn語(yǔ)句,它會(huì)在finally塊執(zhí)行后得以執(zhí)行,所以如果不想退出程序的話,這個(gè)方法還不如用異常來(lái)控制。
另外,break, continue也是比較強(qiáng)大的跳轉(zhuǎn)語(yǔ)句,特別是break label和continue label,可以跳出一層循環(huán)或是多層循環(huán); 但是要注意一點(diǎn)的是break只能在循環(huán)語(yǔ)句和switch語(yǔ)句中使用,continue只能在循環(huán)語(yǔ)句中使用。所以它們的局限性也很大。
這個(gè)小示例說(shuō)明,goto不單單是一個(gè)語(yǔ)句,它是一種解決問(wèn)題的思路和編程習(xí)慣,習(xí)慣了它的人,或者是想用它的人,即使不用goto也會(huì)寫出類似goto邏輯出來(lái)。它的優(yōu)點(diǎn)是會(huì)更容易的幫助找出解決方案。它的缺點(diǎn)也是眾人皆知。但我們要避免的不單單是一個(gè)goto語(yǔ)句,而是這種“跳轉(zhuǎn)式”的解決思路和編程習(xí)慣。

相關(guān)文章

  • Qt中QDateTimeEdit的具體使用

    Qt中QDateTimeEdit的具體使用

    本文主要介紹了Qt中QDateTimeEdit的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 詳解C++中typedef 和 #define 的區(qū)別

    詳解C++中typedef 和 #define 的區(qū)別

    這篇文章主要介紹了C++中typedef 與 #define 的區(qū)別,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)

    Visual Studio Code 2020安裝教程及CPP環(huán)境配置(教程圖解)

    這篇文章主要介紹了Visual Studio Code 2020安裝教程、CPP環(huán)境配置,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • C++ typeid 和虛函數(shù)詳解

    C++ typeid 和虛函數(shù)詳解

    這篇文章主要介紹了c++ typeid 和虛函數(shù)的使用,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下,希望能夠給你帶來(lái)幫助
    2021-09-09
  • Linux網(wǎng)絡(luò)編程之UDP Socket程序示例

    Linux網(wǎng)絡(luò)編程之UDP Socket程序示例

    這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之UDP Socket程序示例,有助于讀者在實(shí)踐中掌握UDP協(xié)議的原理及應(yīng)用方法,需要的朋友可以參考下
    2014-08-08
  • 快速了解Boost.Asio 的多線程模型

    快速了解Boost.Asio 的多線程模型

    這篇文章主要介紹了Boost.Asio 的多線程模型的相關(guān)知識(shí),文中代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • FFmpeg中AVIOContext的使用方法詳解

    FFmpeg中AVIOContext的使用方法詳解

    AVIOContext是FFMPEG管理輸入輸出數(shù)據(jù)的結(jié)構(gòu)體,這篇文章主要為大家詳細(xì)介紹了這個(gè)結(jié)構(gòu)體的具體使用,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-08-08
  • QT5連接MySQL實(shí)現(xiàn)增刪改查

    QT5連接MySQL實(shí)現(xiàn)增刪改查

    這篇文章主要為大家詳細(xì)介紹了QT5如何連接MySQL實(shí)現(xiàn)增刪改查功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下
    2022-12-12
  • vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問(wèn)題解決

    vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問(wèn)題解決

    C4996錯(cuò)誤的意思:是VS覺得strcpy這函數(shù)不安全,建議你使更安全的函數(shù),那么如何解決呢,本文主要介紹了vs運(yùn)行時(shí)報(bào)C4996代碼錯(cuò)誤的問(wèn)題解決,感興趣的可以了解一下
    2024-01-01
  • C語(yǔ)言如何實(shí)現(xiàn)BOOL類型

    C語(yǔ)言如何實(shí)現(xiàn)BOOL類型

    這篇文章主要介紹了C語(yǔ)言如何實(shí)現(xiàn)BOOL類型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論