欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解goto語句的替代實現方式分析

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

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
}

和:
復制代碼 代碼如下:

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

以上二段都等同于:
復制代碼 代碼如下:

       // 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

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

相關文章

  • Qt中QDateTimeEdit的具體使用

    Qt中QDateTimeEdit的具體使用

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

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

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

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

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

    C++ typeid 和虛函數詳解

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

    Linux網絡編程之UDP Socket程序示例

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

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

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

    FFmpeg中AVIOContext的使用方法詳解

    AVIOContext是FFMPEG管理輸入輸出數據的結構體,這篇文章主要為大家詳細介紹了這個結構體的具體使用,文中的示例代碼講解詳細,需要的可以參考一下
    2023-08-08
  • QT5連接MySQL實現增刪改查

    QT5連接MySQL實現增刪改查

    這篇文章主要為大家詳細介紹了QT5如何連接MySQL實現增刪改查功能,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-12-12
  • vs運行時報C4996代碼錯誤的問題解決

    vs運行時報C4996代碼錯誤的問題解決

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

    C語言如何實現BOOL類型

    這篇文章主要介紹了C語言如何實現BOOL類型問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評論