C++ 的 goto 語句在大多數時間是被打入冷宮的,就因為它容易使代碼晦澀難讀。同時,break 和 continue 又經常在多重循環中黔驢技窮——不能越層控制循環。
相比之下,Java 就兼顧這兩種情況,将 goto 徹底禁用,而标簽則限制其隻能用于循環之前,以此增加 break 和 continue 的功能,使其能越層控制循環 [參閱:《帶标簽的 break 和 continue (Java)》]
Java 尚能如此,為何不在 C++ 中用标簽和 goto 語句模仿 Java 來增強 break 和 continue 的功能呢?
于是照 Java 代碼寫了一份 C++ 的試驗樣例,結果第一次試驗失敗。代碼如下:
- 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;
- }
- 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;
- }
- 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;
- }