日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

throw()使用小结

發布時間:2023/12/13 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 throw()使用小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么要加一個throw()到你的函數中?

這是異常規范,只會出現在聲明函數中,表示這個函數可能拋出任何類型的異常

void GetTag() throw(int);表示只拋出int類型異常
void GetTag() throw(int,char);表示拋出in,char類型異常
void GetTag() throw();表示不會拋出任何類型異常
void GetTag() throw(...);表示拋出任何類型異常

void GetTag() throw(int);表示只拋出int類型異常
并不表示一定會拋出異常,但是一旦拋出異常只會拋出int類型,如果拋出非
int類型異常,調用unexsetpion()函數,退出程序。

假如你加一個throw()屬性到你的永遠不會拋出異常的函數中,編譯器會非常聰明的知道代碼的意圖和決定優化方式。考慮下面的代碼:


顯示代碼打印01 class MyClass ?

02 { ?

03???? size_t CalculateFoo() ?

04???? { ?

05???????? : ?

06???????? : ?

07???? }; ?

08???? size_t MethodThatCannotThrow() throw() ?

09???? { ?

10???????? return 100; ?

11???? }; ?

12???? void ExampleMethod() ?

13???? { ?

14???????? size_t foo, bar; ?

15???????? try

16???????? { ?

17???????????? foo = CalculateFoo(); ?

18???????????? bar = foo * 100; ?

19???????????? MethodThatCannotThrow(); ?

20???????????? printf("bar is %d", bar); ?

21???????? } ?

22???????? catch (...) ?

23???????? { ?

24???????? } ?

25???? } ?

26 };

當編譯器看到這個帶"throw()"屬性代碼的時候,編譯能夠優化這個"bar"變量,因為它知道從MethodThatCannotThrow()函數中不會拋出任何的異常。如果沒有這個throw()屬性,編譯器必須創建這個"bar"變量,因為假如MethodThatCannotThrow拋出了一個異常,這個異常句柄可能會需要依靠這個bar變量。

另外,象prefast源代碼分析工具能夠(也會)用throw()注釋去優化他們的錯誤檢測能力----舉個例子,假如你有一個try/catch而且所有調用的函數都已經標記了throw(),實際上你不需要這個try/catch(是的,假如你最后調用的函數可能拋出異常這就會有個問題了)。



轉載于:https://www.cnblogs.com/spring3/archive/2012/03/08/2400950.html

總結

以上是生活随笔為你收集整理的throw()使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。