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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

【C++】 外传篇 2_函数的异常规格说明

發(fā)布時(shí)間:2025/4/16 c/c++ 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】 外传篇 2_函数的异常规格说明 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

函數(shù)的異常規(guī)格說(shuō)明

問(wèn)題: 如何判斷一個(gè)函數(shù)是否會(huì)拋出異常,以及拋出哪些異常?

  • C++ 提供語(yǔ)法用于聲明函數(shù)所拋出的異常
  • 異常聲明作為函數(shù)聲明的修飾符,寫(xiě)在參數(shù)列表后面
/** 可能拋出任何異常 */ void func1();/** 只能拋出的異常類型: char 和 int */ void func2() throw(char, int);/** 不拋出任何異常 */ void func3() throw();
  • 異常規(guī)格說(shuō)明的意義

    • 提示函數(shù)調(diào)用者必須做好異常處理的準(zhǔn)備
    • 提示函數(shù)維護(hù)者不要拋出其它異常
    • 異常規(guī)格說(shuō)明是函數(shù)接口的一部分

問(wèn)題: 如果拋出的異常不在聲明列表中,會(huì)發(fā)生什么?

編程實(shí)驗(yàn): 異常規(guī)格之外的異常

#include <iostream>using namespace std;void func() throw(int) {cout << "func()" << endl;throw 'c'; }int main() {try{func();}catch(int){cout << "catch(int)" << endl;}catch(char){cout << "catch(char)" << endl;}return 0; } 輸出:[g++] func() terminate called after throwing an instance of 'char' 已放棄輸出:[vc2010] func() catch(char)注意: g++ :編譯后可執(zhí)行程序異常停止 vc++2010 :func(); 拋出的異常被被捕獲
  • 函數(shù)拋出的異常不在規(guī)格說(shuō)明中,全局 unexpected() 被調(diào)用
  • 默認(rèn)的 unexpected() 函數(shù)會(huì)調(diào)用全局的 terminated() 函數(shù)
  • 可以自定義函數(shù)替換默認(rèn)的 unexpected() 函數(shù)實(shí)現(xiàn)
  • 注意: 不是所有的 C++ 編譯器都支持這個(gè)標(biāo)準(zhǔn)行為(例:vc++2010)

  • unexpected() 函數(shù)的替換

    • 自定義一個(gè)無(wú)參數(shù)無(wú)返回值的函數(shù)

      • 能夠再次拋出異常

        • 當(dāng)異常符合觸發(fā)函數(shù)的異常規(guī)格說(shuō)明時(shí),恢復(fù)程序執(zhí)行
        • 否則,調(diào)用全局 terminate() 函數(shù)結(jié)束程序
    • 調(diào)用 set_unexpected() 設(shè)置自定義的異常函數(shù)

      • 參數(shù)類型為 void(*)()
      • 返回值為默認(rèn)的 unexpected() 函數(shù)入口地址

編程實(shí)驗(yàn): 自定義 unexpected() 函數(shù)

#include <iostream>using namespace std;void my_unexpected() {cout << "void my_unexpected()" << endl;// exit(1);throw 1; }void func() throw(int) {cout << "func()" << endl;throw 'c'; }int main() {set_unexpected(my_unexpected);try{func();}catch(int){cout << "catch(int)" << endl;}catch(char){cout << "catch(char)" << endl;}return 0; } 輸出:[g++] func() void my_unexpected() catch(int)輸出:[vc++2010] func() catch(char)

總結(jié):
對(duì)于異常規(guī)格說(shuō)明,不同的編譯器有不同的行為。在實(shí)際項(xiàng)目中,可編寫(xiě)測(cè)試程序查看使用的編譯器有沒(méi)有遵循 C++ 規(guī)范。

小結(jié)

  • C++ 中的函數(shù)可以聲明異常規(guī)格說(shuō)明
  • 異常規(guī)格說(shuō)明可以看作接口的一部分
  • 函數(shù)拋出的異常不在規(guī)格說(shuō)明中, unexpected() 被調(diào)用
  • unexpected() 中能夠再次拋出異常

    • 異常能夠匹配,恢復(fù)程序的執(zhí)行
    • 否則,調(diào)用 terminate() 程序結(jié)束

以上內(nèi)容參考狄泰軟件學(xué)院系列課程,請(qǐng)大家保護(hù)原創(chuàng)!

總結(jié)

以上是生活随笔為你收集整理的【C++】 外传篇 2_函数的异常规格说明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看国产精品一区 | 午夜免费av | 中文字幕欧美一区 | 国产一区二区三区在线 | c逼视频| 色呦呦网站入口 | av电影一区二区 | 一级一级黄色片 | 久久大香焦| 欧美福利一区二区三区 | 后宫秀女调教(高h,np) | 2021国产在线视频 | 国产精品区一区二 | 久久久国产精华液999999 | 偷偷色噜狠狠狠狠的777米奇 | 久久av一区二区三区漫画 | 美女扒开腿让男人 | 亚洲视频一区二区三区 | 黄色日比视频 | 会喷水的亲姐姐 | 国产激情久久久久久熟女老人av | 国产一及毛片 | 亚洲春色另类 | 女同hd系列中文字幕 | 亚洲熟妇无码一区二区三区导航 | 国产成人自拍一区 | 中文字幕日韩一区 | 久久久久99精品成人片我成大片 | 超碰人人在线观看 | 亚洲无人区码一码二码三码 | 少妇高潮灌满白浆毛片免费看 | 中文字幕亚洲国产 | 国产三级国产精品国产专区50 | 字幕网在线 | 亚洲系列在线 | 91av视频播放 | 91视 | 萌白酱在线观看 | 国产午夜成人久久无码一区二区 | 浪漫樱花在线观看高清动漫 | 制服.丝袜.亚洲.另类.中文 | 国产在线观看免费高清 | 一级做a爱片久久毛片 | 久草资源在线观看 | 国产精品爽爽久久久久久 | 国产在线专区 | 激情草逼 | 男女羞羞的视频 | 青青草官网 | 国产精品第五页 | 国产av无码专区亚洲精品 | 免费美女毛片 | 成人影片在线 | 精品日韩在线视频 | 色婷婷婷婷色 | 69社| 宅男av在线 | 亚洲最大成人在线 | 风间由美一区二区 | 黄在线视频 | jizjiz中国少妇高潮水多 | 国产精品成人久久电影 | 国模人体一区二区 | 男女www | 日韩 在线| 国产91精品ai换脸 | 欧美在线a | 亚洲成人精品一区二区 | 91在线观看免费 | 国产99久久久久久免费看 | 亚州黄色 | 一级做a爱片 | 黄色片免费在线观看 | 国产肥老妇视频 | 日产av在线 | 成人av亚洲 | 成人免费一区 | 亚洲国产精品视频一区 | 午夜精品福利一区二区 | 97人人超| 色老二导航 | 欧美成免费 | 免费毛片一区二区三区 | 成人片黄网站色大片免费毛片 | 国产福利合集 | 双性懵懂美人被强制调教 | 久久婷婷成人综合色 | 国产精品一区在线免费观看 | 嫩草嫩草嫩草嫩草 | 俄罗斯丰满熟妇hd | 国产一区二区三区播放 | 日韩欧美黄色网址 | 久久免费看片 | 99mav | 97av在线视频 | 久久久久一区 | 亚洲素人| 91麻豆精品国产91久久久久久 | 在线视频日韩精品 |