国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

C++ - switch ステートメントブロックの前にデフォルトが配置されている狀況に対処する方法
天蓬老師
天蓬老師 2017-07-06 10:35:10
0
3
2701
リーリー

なぜこのコードは 3 なのでしょうか?初めて i が 1 のときは、default: c =i; が使用され、2 回目の i が 2 のときは、case 2: c ;break; が使用されるケースではないでしょうか? それで終了し、c=結(jié)局2が出力されるのか?なぜ 3 なのでしょうか?

天蓬老師
天蓬老師

歡迎選擇我的課程,讓我們一起見證您的進(jìn)步~~

全員に返信(3)
女神的閨蜜愛上我

まず、switch で注意すべき點(diǎn)をいくつか明確にしましょう:

1.

switch 語句體由一系列 case 標(biāo)簽和一個(gè)可選 default 標(biāo)簽組成。 case 語句中的兩個(gè)常量表達(dá)式的計(jì)算結(jié)果不能為同一個(gè)值。 default 標(biāo)簽只能出現(xiàn)一次。 標(biāo)記語句不是語法要求,但如果它們不存在,switch 語句是無意義的。默認(rèn)語句(即default標(biāo)簽)無需顯示在末尾;它可以顯示在 switch 語句體的任何位置casedefault 標(biāo)簽只能顯示在 switch ステートメント內(nèi)。
抜粋: Microsoft Visual Studio 2015 C++ Switch ステートメントの公式ドキュメント

2.

上記の casedefault本身就是標(biāo)簽,就是告訴編譯器從滿足這個(gè)標(biāo)簽開始向后執(zhí)行,之后不會(huì)再判斷其他標(biāo)簽的正確性,直到break語句或者switch ステートメントの範(fàn)囲は終了します。

この問題について

ステップ 1 : i=1 の場合、i!=2&&i!=4 なので、default タグの後に実行が開始されます。ステートメント c+=i; を?qū)g行します (ここでは、コンパイラーが c を 0 に初期化すると仮定します。すべてのコンパイラーがそれほどフレンドリーであるわけではないことを知っておく必要があります) 実行後の c の値は 1 です。ステップ 2i=1時(shí),由于i!=2&&i!=4故從default標(biāo)簽后開始執(zhí)行,此時(shí)執(zhí)行語句c+=i;(我們現(xiàn)在就假設(shè)編譯器幫你把c初始化為0,要知道并不是所有的編譯器都這么友好)執(zhí)行后c的值為1;
STEP 2:綜合上述1,2可知由于此時(shí)沒有碰到任何break語句也沒有到switch語句的作用域結(jié)束(因?yàn)檫@個(gè)default語句是放在第一個(gè)的)所以它接著向后執(zhí)行case 2后的語句(此時(shí)編譯器已經(jīng)不看滿不滿足case標(biāo)簽了)此時(shí)執(zhí)行語句c++;執(zhí)行后c的值為2;遇到break語句跳出switch語句。
STEP 3:當(dāng)i=2時(shí),由于i滿足case 2的情況,所以直接從case 2便簽后的語句開始執(zhí)行,此時(shí)執(zhí)行語句c++,執(zhí)行后c的值為3,遇到break語句跳出switch語句。
STEP 4:當(dāng)i=3時(shí),跳出for: 上記 1 と 2 に基づいて、この時(shí)點(diǎn)では break ステートメントに遭遇しておらず、switch ステートメントのスコープが終了していないことがわかります。 (このため、default ステートメントが最初に配置されます)、その後、case 2 の後のステートメントが逆方向に実行されます (この時(shí)點(diǎn)では、コンパイラーは の條件を満たしていません) case ラベル) このとき、c++ ステートメントが実行され、break ステートメントが検出されると、c の値は 2 になります。 >switch文が飛び出しています。
ステップ 3: i=2 の場合、i は case 2 の狀況を満たしているため、case 2 の後のステートメントを直接続けます。 note 実行を開始します。この時(shí)點(diǎn)で、ステートメント c++ が実行されます。実行後の c の値は 3 です。break ステートメントが検出されると、switch が実行されます。 文が飛び出しています。

??ステップ 4??: i=3 の場合、for ループから抜け出して c=3 を出力します ???? (上記のプロセスは、Visual Studio 2015 のシングルステップ デバッグを使用して私が導(dǎo)き出した結(jié)論です。データを結(jié)合します) ?? ??
三叔

i=1の場合、デフォルト: c=1に入り、ブレークがないため、ケース2と一致し続け、c=2ブレークを取得します
i=2の場合、最初にケース2と一致し、ケース2: c=3に入りますBreak
i=3の場合 サイクルが成立しません。
出力cは3です

三叔

リーリー

最新のダウンロード
詳細(xì)>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート