乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      C++?中使用?goto?增強(qiáng)?break?和?continue(轉(zhuǎn)) -- 揚(yáng)帆起航 -- 編程愛好者博客

       浮 生 2009-09-09


      C++ 的 goto 語句在大多數(shù)時(shí)間是被打入冷宮的,就因?yàn)樗菀资勾a晦澀難讀。同時(shí),break 和 continue 又經(jīng)常在多重循環(huán)中黔驢技窮——不能越層控制循環(huán)。

        相比之下,Java 就兼顧這兩種情況,將 goto 徹底禁用,而標(biāo)簽則限制其只能用于循環(huán)之前,以此增加 break 和 continue 的功能,使其能越層控制循環(huán) [參閱:《帶標(biāo)簽的 break  和 continue (Java)》]

        Java 尚能如此,為何不在 C++ 中用標(biāo)簽和 goto 語句模仿 Java 來增強(qiáng) break 和 continue 的功能呢?

        于是照 Java 代碼寫了一份 C++ 的試驗(yàn)樣例,結(jié)果第一次試驗(yàn)失敗。代碼如下:

      int main(int argc, char* argv[])
      {
          cout 
      << "[begin>" << endl;
      continuei:
          
      for (int i = 0; i < 10; i++{
              
      for (int j = 0; j < 5; j++{
                  
      if ((i + j) % 5 == 0{
                      cout 
      << "continue i" <<endl;
                      
      goto continuei;
                  }

                  cout 
      << i << "" << j << endl;
              }

          }

          cout 
      << "<end]" << endl;
      }

        這樣做的結(jié)果是死循環(huán)。每次 goto continuei 之后,就會(huì)重新執(zhí)行第一個(gè)循環(huán),所以造成了死循環(huán)。看來,只能把標(biāo)簽定義在緊接著循環(huán)結(jié)束符(},完成花括號(hào))之前,于是又起一例。這次測(cè)試成功。代碼如下:

      int main(int argc, char* argv[])
      {
          cout 
      << "[begin>" << endl;
          
      for (int i = 0; i < 10; i++{
              
      for (int j = 0; j < 5; j++{
                  
      if ((i + j) % 5 == 0{
                      cout 
      << "continue i" <<endl;
                      
      goto continuei;
                  }

                  cout 
      << i << "" << j << endl;
              }

      continuei: 
      continue;
          }

          cout 
      << "<end]" << endl;
      }

        不過,這里如果 break 和 continue 同時(shí)出現(xiàn)的話,continue 應(yīng)該放在前面。因?yàn)?,如果循環(huán)過程中沒有觸發(fā) goto 語句,這個(gè)循環(huán)在執(zhí)行到本次循環(huán)結(jié)束的時(shí)候,是應(yīng)該繼續(xù)下一次循環(huán)的。continue 定義在前面,就會(huì)先執(zhí)行到它,也就會(huì)路過后面后 break 繼續(xù)下一次循環(huán)。返之,如果把 break 放在 continue 前面,則會(huì)跳過后面的 continue,跳出循環(huán)——這就違背了初衷。還是興趣個(gè)例子:

      int main(int argc, char* argv[])
      {
          cout 
      << "[begin>" << endl;
          
      for (int i = 0; i < 10; i++{
              
      for (int j = 0; j < 5; j++{
                  
      if ((i + j) % 5 == 0{
                      cout 
      << "continue i" <<endl;
                      
      goto continuei;
                  }

                  
      if (i == 7 && j == 1{
                      cout 
      << "break i" << endl;
                      
      goto breaki;
                  }

                  cout 
      << i << "" << j << endl;
              }

      continuei: 
      continue;
      breaki: 
      break;
          }

          cout 
      << "<end]" << endl;
      }

        最后還是要說明一下,這個(gè)方法要慎用,因?yàn)槎嘀匮h(huán)本身就應(yīng)該慎用的。多數(shù)需多重循環(huán)的代碼,都可以拆分成每個(gè)循環(huán)一個(gè)函數(shù)來替代。這樣做會(huì)讓代碼更易讀,但是也會(huì)降低程序的執(zhí)行效率。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多