自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C++異常概念詳解

開發(fā) 后端
C++異常在實際操作中有三種方法供我們使用,包括:傳值(by value);傳指針(by pointer);傳引用(by reference)等等。

運用編程語言進行程序開發(fā)時,都需要進行異常的處理,才能使我們的程序完善。在C++語言中,同樣也有關(guān)于異常處理的操作。在這里我們將會介紹幾種C++異常的常用操作方法,希望能給大家?guī)硪恍椭?t#

C++函數(shù)后面后加到關(guān)鍵字throw(something)限制,是對這個函數(shù)的異常安全性作出限制。

void f() throw() 表示f不允許拋出任何異常,即f是異常安全的。

void f() throw(...) 表示f可以拋出任何形式的異常。

void f() throw(exceptionType); 表示f只能拋出exceptionType類型的C++異常。

引別人的一個笑話:

throw() 大概會說:“噢,不管你拋什么,就是不準(zhǔn)拋。。”

throw(...) 呵呵一笑,滿臉慈祥:“拋吧拋吧,盡情地拋吧。。。”

throw(type) 一聽急了:“那可不行,要拋也只能拋我的香煙頭,否則要是不小心把俺祖?zhèn)鞯慕鸾渲笒伒艟吞澚?。。?rdquo;

關(guān)于C++異常傳遞有三種方法:

1.傳值(by value)

傳值的過程中會產(chǎn)生臨時對象的拷貝,不能解決多態(tài)的問題,如下:myexception繼承exception,但是但確無法被正確的調(diào)用myexception的方法,造成對異常對象的切割。

 

 

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char* what() throw();  
  4. };  
  5. const char* myexception::what(){  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception exc){  
  20. cout<<exc.what();  
  21. }  

 

運行結(jié)果:UnKnown exceptions

程序執(zhí)行是會調(diào)用exception的what方法,而不是myexception的what方法。

2.傳指針(by pointer)

指針可以實現(xiàn)多態(tài),但往往會將臨時對象的地址作為指針傳出去,出現(xiàn)懸掛指針錯誤。如果在堆上分配內(nèi)存空間,又往往不知道何時刪除對象,出現(xiàn)to be or not to be的錯誤。

結(jié)果顯示:myException

 

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char * what() const;  
  4. };  
  5. const char* myexception::what() const{  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw new myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception* pexc){  
  20. cout<<pexc->what();  
  21. delete pexc;  
  22. }  

3.傳引用(by reference)

傳引用是***的方法,可以克服前面的兩個問題。

程序結(jié)果顯示:myException

  1. class myexception:public exception{  
  2. public:  
  3. virtual const char * what() const;  
  4. };  
  5. const char* myexception::what() const{  
  6. return "myException";  
  7. }  
  8. class A{  
  9. public:  
  10. A(){}  
  11. void f() throw(){  
  12. throw myexception();  
  13. }  
  14. };  
  15. int main(){  
  16. A a;  
  17. try{  
  18. a.f();  
  19. }catch(exception& exc){  
  20. cout<<exc.what();  
  21. }  

C++異常的基本概念就為大家介紹到這里。

責(zé)任編輯:曹凱 來源: 博客園
相關(guān)推薦

2010-02-01 16:13:15

C++繼承

2010-02-02 10:33:22

C++引用

2010-02-01 14:53:42

C++屬性

2010-02-02 09:43:27

C++存儲區(qū)域

2010-02-02 15:30:05

C++ include

2010-02-01 17:24:41

C++循環(huán)語句

2010-02-06 14:04:58

C++內(nèi)存使用機制

2010-01-15 10:41:06

CC++

2021-03-25 07:44:39

C++異常處理開發(fā)技術(shù)

2021-12-21 15:31:10

C++語言指針

2011-04-20 09:50:45

Virtual

2010-02-06 09:53:26

C++ void

2010-02-01 15:01:34

C++拋出異常

2010-01-27 15:36:54

C++異常處理

2023-11-09 23:56:21

2010-02-03 13:22:07

C++時間

2010-02-03 17:42:33

C++模板參數(shù)

2010-02-05 12:57:20

C++ kdevelo

2010-01-18 16:17:53

C++代碼

2024-01-22 10:49:55

C++for循環(huán)
點贊
收藏

51CTO技術(shù)棧公眾號