2012-10-28 50 views
2

我有一些C++代碼,看起來像這樣:try語句中的一個語句中的異常是否會導致控制流繞過try語句塊中的所有剩餘語句?

void Student::addCourse(Course cVal, string gr) throw(...) { 
    try { 
     GradedCourse c(cVal, gr); // If an exception is thrown here... 
     coursesTaken.insert(c); // will this statement be executed? 
    } catch(...) { 
     throw; 
    } 
} 

GradedCourse構造可如果gr,其中包含爲一療程級拋出一個異常,發現由構造是無效的。如果發生這種異常,將執行try區塊內的任何進一步陳述嗎?我可以肯定,這樣的例外將不會導致GradedCourse插入coursesTaken(這是一個STL集合)嗎?我搜索了Stack Overflow和Google,都沒有取得太大的成功。

+0

是的,如果第一條語句拋出一個異常,你的第二條語句將永遠不會執行。 –

+0

@HunterMcMillen如果你想回答一個問題,爲什麼不發表一個答案,而不是評論? – delnan

+0

請注意(因爲我看到太多這樣的):try/catch/rethrow是不必要的,就像'throw(...)'規範一樣... –

回答

2

如果GradedCourse c(cVal, gr);拋出一個異常,沒有別的try塊內將被執行。

+0

哇,我從來沒有料到Stack Overflow在回答這個問題時很快像這樣的問題... – bwDraco

+0

很高興你感到驚喜;) – alestanis

0

現在我明白你在問什麼,但你的頭銜和問題本身都是要求相互衝突的東西。 :)

如果在try塊內引發異常,執行立即跳轉到處理該異常的catch塊,繞過所有其他語句。

Here is the documentation on exceptions.它並不直接解決您的問題,但它確實涵蓋了其他重要的事情,例如異常嵌套或鏈接異常處理程序。

+0

我已經看過鏈接的文章。如果我需要的信息在那裏,我不會問這個問題。 – bwDraco