小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 浮 生 2009-09-09


C++ 的 goto 語句在大多數(shù)時間是被打入冷宮的,就因為它容易使代碼晦澀難讀。同時,break 和 continue 又經(jīng)常在多重循環(huán)中黔驢技窮——不能越層控制循環(huán)。

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

  Java 尚能如此,為何不在 C++ 中用標簽和 goto 語句模仿 Java 來增強 break 和 continue 的功能呢?

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

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 之后,就會重新執(zhí)行第一個循環(huán),所以造成了死循環(huán)??磥恚荒馨褬撕灦x在緊接著循環(huán)結(jié)束符(},完成花括號)之前,于是又起一例。這次測試成功。代碼如下:

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

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;
}

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

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多