如果編譯器可以知道一個try塊不會拋出異常,那整個try-catch部分是不是會被忽略?
01-08
具體來說,就是在上述情況下catch後的處理代碼到底會不會生成目標代碼
這樣看怎麼定義知道了,如果是
try
{
int i = 0;
}
這樣的不具有Might Throw屬性的,那麼catch塊的東西不會生成。
然而,如果是有Might Throw屬性的,比如new
try
{
A* ptrA = new A();
}
那麼,catch塊的東西還是會生成。
關鍵點在:throwJava應該是可以的,因為所有方法必須顯性定義能不能拋出異常
C#應該也可以,因為編輯器應該可以從元數據里得到類似的信息C++打開異常的情況下,現代編輯器應該也有類似的信息,所以大概也可以……嗯,這麼說應該就是都可以了。推薦閱讀:
※Python 的異常機制及規範是否相當不人性化?
※Go 語言的錯誤處理機制是一個優秀的設計嗎?
※各種編程語言中的「錯誤/異常處理」有哪些成熟的,優雅的或是熱門的機制/思想?