標籤:

如果編譯器可以知道一個try塊不會拋出異常,那整個try-catch部分是不是會被忽略?

具體來說,就是在上述情況下catch後的處理代碼到底會不會生成目標代碼


這樣看怎麼定義知道了,如果是

try
{
int i = 0;
}

這樣的不具有Might Throw屬性的,那麼catch塊的東西不會生成。

然而,如果是有Might Throw屬性的,比如new

try
{
A* ptrA = new A();
}

那麼,catch塊的東西還是會生成。

關鍵點在:throw


Java應該是可以的,因為所有方法必須顯性定義能不能拋出異常

C#應該也可以,因為編輯器應該可以從元數據里得到類似的信息

C++打開異常的情況下,現代編輯器應該也有類似的信息,所以大概也可以……

嗯,這麼說應該就是都可以了。


推薦閱讀:

Python 的異常機制及規範是否相當不人性化?
Go 語言的錯誤處理機制是一個優秀的設計嗎?
各種編程語言中的「錯誤/異常處理」有哪些成熟的,優雅的或是熱門的機制/思想?

TAG:C | 異常處理 |