4
當沒有未處理的異常在堆棧中處理得更高時,C++標準應該如何處理以下代碼?趕上(...)在投擲上工作;沒有任何對象?
try {
throw;
} catch (...) {
cerr << "Caught exception." << endl;
}
請問沒有對象的投擲是否被抓到?
當沒有未處理的異常在堆棧中處理得更高時,C++標準應該如何處理以下代碼?趕上(...)在投擲上工作;沒有任何對象?
try {
throw;
} catch (...) {
cerr << "Caught exception." << endl;
}
請問沒有對象的投擲是否被抓到?
從2003 C++標準第15.1節[except.throw]/8:
如果沒有例外當前被處理,執行擲表達無操作數調用
terminate()
。
因此,在您的示例中,由於當前沒有異常處理,因此不會引發任何異常,而是調用terminate()
。由於terminate()
不會返回,因此您的catch
塊將不會被輸入。
+1順便說一句,對於引文:P – Nawaz 2011-04-23 18:30:11
糟糕:| ...下次再來吧:P – Nawaz 2011-04-23 18:32:20
...不要傳遞'throw;'不要收集異常'$ 200'。 – Potatoswatter 2011-04-23 19:40:22