• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            異常規(guī)范

            異常異常規(guī)范exception specification 提供
            了一種方案它能夠隨著函數(shù)聲明列出該函數(shù)可能拋出的異常它保證該函數(shù)不會(huì)拋出任何
            其他類型的異常
            異常規(guī)范跟隨在函數(shù)參數(shù)表之后它用關(guān)鍵字throw 來指定后面是用括號(hào)括起來的異
            常類型表例如我們可以如下修改iStack 類的成員函數(shù)的聲明以增加適當(dāng)?shù)漠惓R?guī)范
            class iStack {
            public:
            // ...
            void pop( int &value ) throw(popOnEmpty);
            void push( int value ) throw(pushOnFull);
            private:
            // ...
            };

            如果函數(shù)聲明指定了一個(gè)異常規(guī)范,則同一函數(shù)的重復(fù)聲明必須指定同一類型的異常規(guī)
            范,同一函數(shù)的不同聲明上的異常規(guī)范是不能累積的。例如
            // 同一函數(shù)的兩個(gè)聲明
            extern int foo( int = 0 ) throw(string);
            // 錯(cuò)誤: 異常規(guī)范被省略
            extern int foo( int parm ) { }

            如果函數(shù)拋出了一個(gè)沒有被列在異常規(guī)范中的異常會(huì)怎么樣程序只有在遇到某種不正
            常情況時(shí)異常才會(huì)被拋出在編譯時(shí)刻編譯器不可能知道在執(zhí)行時(shí)程序是否會(huì)遇到這些
            異常因此一個(gè)函數(shù)的異常規(guī)范的違例只能在運(yùn)行時(shí)刻才能被檢測(cè)出來如果函數(shù)拋出了
            一個(gè)沒有被列在其異常規(guī)范中的異常則系統(tǒng)調(diào)用C++標(biāo)準(zhǔn)庫中定義的函數(shù)unexpected()
            unexpected()的缺省行為是調(diào)用terminate() 在某些條件下可能有必要改變unexpected()
            執(zhí)行的動(dòng)作C++標(biāo)準(zhǔn)庫提供了一種機(jī)制可讓我們改變unexpected()的缺省行為

            1 空的異常規(guī)范保證函數(shù)不會(huì)拋出任何異常例如函數(shù)no_problem()保證不會(huì)拋出任何
            異常
            extern void no_problem() throw();
            2 如果一個(gè)函數(shù)聲明沒有指定異常規(guī)范則該函數(shù)可以拋出任何類型的異常
            在被拋出的異常類型與異常規(guī)范中指定的類型之間不允許類型轉(zhuǎn)換。例如
            int convert( int parm ) throw(string)
            {
            // ...
            if ( somethingRather )
            // 程序錯(cuò)誤:
            // convert() 不允許 const char* 型的異常
            throw "help!";
            }
            在函數(shù)convert()中的throw 表達(dá)式拋出一個(gè)C 風(fēng)格的字符串由這個(gè)throw 表達(dá)式創(chuàng)建
            的異常對(duì)象的類型為const char* 通常const char*型的表達(dá)式可以被轉(zhuǎn)換成string 類型
            但是異常規(guī)范不允許從被拋出的異常類型到異常規(guī)范指定的類型之問的轉(zhuǎn)換如果convert()
            拋出該異常則調(diào)用函數(shù)unexpected() 為了修正這種情況可以如下修改throw 表達(dá)式
            顯式地把表達(dá)式的值轉(zhuǎn)換成string 類型
            throw string( "help!" );
            3
            我們也可以在函數(shù)指針的聲明處給出一個(gè)異常規(guī)范例如
            void (*pf) (int) throw(string);
            該聲明表示pf 是一個(gè)函數(shù)指針?biāo)荒軖伋鰏tring 類型的異常和函數(shù)聲明一樣同一
            指針的不同異常規(guī)范不能累積指針pf 的所有聲明都必須指定相同的規(guī)范例如
            extern void (*pf)( int ) throw(string);
            // 錯(cuò)誤: 缺少異常規(guī)范
            void (*pf) ( int );
            void recoup( int, int ) throw(exceptionType);
            void no_problem() throw();
            void doit( int, int ) throw(string, exceptionType);
            // ok: recoup() 與 pf1 的異常規(guī)范一樣嚴(yán)格
            void (*pf1)( int, int ) throw(exceptionType) = &recoup;
            // ok: no_problem() 比 pf2 更嚴(yán)格
            void (*pf2)() throw(string) = &no_problem;
            // 錯(cuò)誤: doit()沒有 pf3 嚴(yán)格
            void (*pf3)( int, int ) throw(string) = &doit;

            posted on 2007-09-29 00:39 旅途 閱讀(586) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

            久久久噜噜噜久久熟女AA片| 国产精品欧美亚洲韩国日本久久| 久久久久se色偷偷亚洲精品av| 久久精品无码专区免费东京热| 青青草原综合久久| 久久久久久无码国产精品中文字幕| 精品久久久无码21p发布 | 9191精品国产免费久久| 日日狠狠久久偷偷色综合0| 72种姿势欧美久久久久大黄蕉| 久久精品无码一区二区app| 无码伊人66久久大杳蕉网站谷歌 | 香蕉久久AⅤ一区二区三区| 国产人久久人人人人爽| 一本一道久久a久久精品综合| 久久99国产精品99久久| 久久综合狠狠综合久久| 老男人久久青草av高清| 一本大道久久东京热无码AV| 久久久精品日本一区二区三区| 99久久国语露脸精品国产| 无码精品久久久天天影视| 噜噜噜色噜噜噜久久| 亚洲一区精品伊人久久伊人| 久久这里有精品视频| 久久九九久精品国产免费直播| 狠狠久久亚洲欧美专区| 99久久99久久久精品齐齐| 久久精品国产亚洲AV蜜臀色欲| 亚洲欧美日韩精品久久亚洲区| 色婷婷狠狠久久综合五月| 精品久久久久国产免费| 99久久综合狠狠综合久久| 狠狠人妻久久久久久综合蜜桃| 狠狠色综合久久久久尤物| 国产免费久久精品丫丫| 久久久久97国产精华液好用吗| a级毛片无码兔费真人久久| 人妻无码久久精品| 午夜天堂精品久久久久| 俺来也俺去啦久久综合网|