LONGEPASS
電腦軟體設計(C++)/C++/Q72
中等
正確率 -
Q72.

下列C++程式片段是有關例外(Exception)之處理,其輸出結果何者是正確的?電腦軟體設計(C++) 乙級 C++ 第 72 題 題目 圖片

電腦軟體設計(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 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目