Q72.
下列C++程式片段是有關例外(Exception)之處理,其輸出結果何者是正確的?
電腦軟體設計(C++) · 乙級 · C++ · Q72
難易度分析
3 / 5
本題要求分析程式碼的執行路徑,需掌握例外拋出後控制權的轉移機制以及多重捕獲區塊的優先順序,具有一定的邏輯追蹤需求。
正確答案:②1 2 5
② 1 2 5:正確輸出為 1 2 5。執行流程:先印出 `1`,接著 `throw 2;` 拋出整數例外,跳過 `cout << 3;`,由 `catch (int x)` 捕獲並印出 `2`,最後執行 `catch` 區塊外的 `cout << 5;` 印出 `5`。
錯誤選項解析
- ① 1 2 3:此輸出假設 `cout << 3;` 會被執行,但實際上在 `throw 2;` 拋出例外後,控制權會立即跳離 `try` 區塊,因此 `cout << 3;` 不會被執行。
- ③ 1 2 3 5:此選項錯誤地包含了 `3`,如前所述,`throw` 陳述式會中斷 `try` 區塊的執行流程,`cout << 3;` 不會被執行。
- ④ 1 2 4 5 3:此選項錯誤地包含了 `4`,`catch (...)` 是萬用捕獲器,但由於 `throw 2;` 拋出的是 `int` 型別,已被前面的 `catch (int x)` 捕獲,因此 `catch (...)` 不會被執行。
Learning Tip
"本題核心考點為 C++ 例外處理的執行流程。關鍵觀念:(1) `throw` 陳述式會立即中斷 `try` 區塊後續程式的執行;(2) 多個 `catch` 區塊由上而下比對,最先符合型別者會被執行,因此較具體的型別(如 `int`)應放在較通用的 `catch (...)` 之前;(3) `catch` 區塊執行完畢後,程式會繼續執行 `catch` 區塊之後的程式碼,不會回到 `try` 區塊。"
學員答題分佈
①1 2 30%
②1 2 50%
③1 2 3 50%
④1 2 4 5 30%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!