青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

酸菜豬蹄的程序人生
木下編程屯屯燙燙
C++異常捕獲是在運行時進行的,但是拋出的對象卻是在編譯時確定的,編譯時會對拋出的對象上溯查找到無二義性的基類,然后拋出這個對象的引用。
 
例如:
#include <iostream>
using namespace std;
class CBase
{
public:
 virtual ~CBase(){};
};
 
class CDerived:public CBase
{
};
 
void exceMaker()
{
    throw CDerived();
}
 
void exceCatcher()
{
    try
    {
        exceMaker();
    }
    catch(CBase&)
    {
        cout << "caught a CBase" << endl;
    }
    catch(...)
    {
        cout << "caught else" << endl;
    }
}
 
int main(int argc, char** argv)
{
    exceCatcher();
    cin.get();
    return 0;
}
 
運行后將打印出:
 
caught a CBase.
 
編譯器進行了類型上溯轉換,拋出的CBase的引用,如果同時捕獲CDerived&,也即在exce中加入如下代碼:
catch(CDerived&)
{
    cout << "caught a CDerived" << endl;
}
編譯時將會給出warning,說異常已經被 catch(CBase&)捕獲,證明在編譯時進行了轉換。
 

而如果修改CDerived 為私有繼承CBase,整體代碼如下:
   
#include <iostream>
using namespace std;
class CBase
{
public:
 virtual ~CBase(){};
};
 
class CDerived:private CBase
{
};
 
void exceMaker()
{
    throw CDerived();
}
 
void exceCatcher()
{
    try
    {
        exceMaker();
    }
    catch(CBase&)
    {
        cout << "caught a CBase" << endl;
    }
    catch(...)
    {
        cout << "caught else" << endl;
    }
}
 
int main(int argc, char** argv)
{
    exceCatcher();
    cin.get();
    return 0;
}   
 
將打印出"caught else";
因為私有繼承后,exceMaker函數不能對私有繼承的基類進行上溯(private權限限制),所以拋出的異常為CDerived&,不再是CBase&.
 
而如果這樣:
 
#include <iostream>
using namespace std;
class CBase
{
public:
 virtual ~CBase(){};
};
 
class CDerived:private CBase
{
    friend void exceMaker();
};
 
void exceMaker()
{
    throw CDerived();
}
 
void exceCatcher()
{
    try
    {
        exceMaker();
    }
    catch(CBase&)
    {
        cout << "caught a CBase" << endl;
    }
    catch(...)
    {
        cout << "caught else" << endl;
    }
}
 
int main(int argc, char** argv)
{
    exceCatcher();
    cin.get();
    return 0;
}
 
在VC6中將打印出"caught CBase",因為exceMaker是CDerived的友元函數,可以訪問它的私有成員,故可以上溯到CBase&,但后續(xù)的編譯器版本已經更正為caught else. 因為不是ISA關系。
 
 
posted on 2006-01-06 17:51 cooelaf 閱讀(3608) 評論(4)  編輯 收藏 引用 所屬分類: Pure C/C++
Comments
  • # re: C++異常捕獲機制
    小明
    Posted @ 2006-01-09 12:26
    你說:
    因為exceMaker是CDerived的友元函數,可以訪問它的私有成員,故可以上溯到CBase&

    這種說法太牽強,我不能理解。

    我認為這是vc6/vs2005的C++ exception實現的一個Bug。
    你的最后一個例子 我在C++ BuilderX下面測試的結果是:
    caught else
      回復  更多評論   
  • # re: C++異常捕獲機制
    cooelaf
    Posted @ 2006-01-10 08:32
    to 小明:
    我最開始的時候也是這樣想,因為最后一種繼承方式是私有繼承,不是isa關系,所以不應該上溯到CBase,如果如你所說,可能是vs系列的bug,我會查找一下c++標準對這方面的說法。謝謝。  回復  更多評論   
  • # re: C++異常捕獲機制
    yskin
    Posted @ 2006-02-22 11:04
    最后一個:
    gcc
    caught else  回復  更多評論   
  • # re: C++異常捕獲機制
    cooelaf
    Posted @ 2006-02-22 16:55
    看來確實是這樣。  回復  更多評論   
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲精选中文字幕| 国产一区二区三区在线免费观看 | 麻豆成人综合网| 在线观看视频一区| 免费毛片一区二区三区久久久| 久久夜色精品国产亚洲aⅴ| 亚洲第一精品影视| 日韩午夜在线观看视频| 国产精品久久婷婷六月丁香| 久久精品国产一区二区三区| 久久久最新网址| 一本色道久久| 欧美中文字幕在线视频| 亚洲肉体裸体xxxx137| 一区二区三区欧美激情| 国内外成人免费激情在线视频网站 | 国产亚洲欧美一级| 欧美成人一区二免费视频软件| 欧美女同视频| 久久精品91久久久久久再现| 嫩草伊人久久精品少妇av杨幂| 中文亚洲免费| 久久婷婷人人澡人人喊人人爽 | 国产精品网站在线播放| 欧美成人一区二区在线| 欧美体内谢she精2性欧美 | 一区二区高清在线观看| 欧美亚洲自偷自偷| 99国产一区| 久久国产精品久久w女人spa| 一区二区免费在线观看| 久久久国产精品一区二区三区| 在线亚洲激情| 免费成人在线视频网站| 欧美在线一级视频| 欧美成人综合一区| 亚洲国产精品传媒在线观看 | 欧美韩国日本一区| 国产精品永久免费视频| 亚洲国产一区在线| 国产在线不卡视频| 亚洲欧美日韩国产成人| 99精品欧美一区| 免费在线看成人av| 麻豆视频一区二区| 国产亚洲一区在线播放| 亚洲视频一二| 亚洲香蕉网站| 裸体素人女欧美日韩| 国产精品制服诱惑| 亚洲性图久久| 亚洲线精品一区二区三区八戒| 欧美99在线视频观看| 牛牛影视久久网| 在线观看视频一区| 久久久久国产精品一区二区| 久久久久国产精品一区| 国产欧美一区二区精品仙草咪| 一区二区三区久久网| 亚洲一区二区三区午夜| 国产精品草莓在线免费观看| 亚洲伦伦在线| 亚洲一区二三| 国产精品初高中精品久久| 一区二区免费在线视频| 亚洲一区欧美激情| 国产精品久久久久77777| 中文在线一区| 欧美一区久久| 国内成人在线| 免费成人黄色片| 亚洲精品免费在线观看| 一区二区日韩免费看| 欧美午夜电影完整版| 亚洲视频第一页| 久久成人羞羞网站| 在线观看日韩av先锋影音电影院| 免费中文日韩| 一区二区精品| 久久免费视频这里只有精品| 亚洲国产日韩美| 欧美理论电影网| 一区二区三区视频在线观看| 欧美在线观看一区二区| 一色屋精品视频在线观看网站| 噜噜噜噜噜久久久久久91| 亚洲黄色成人| 香蕉久久夜色精品国产| 一区二区三区在线视频观看| 免费视频亚洲| 亚洲一区二区视频| 欧美好骚综合网| 亚洲一区亚洲二区| 精品9999| 国产精品盗摄久久久| 久久av一区二区三区漫画| 亚洲国产精品一区二区第一页| 亚洲性图久久| 亚洲国产精品成人综合色在线婷婷 | 亚洲午夜小视频| 老司机精品导航| 久久成人综合视频| 亚洲激情成人网| 国产欧美一区二区精品婷婷| 久久亚洲一区二区三区四区| 在线亚洲高清视频| 欧美刺激午夜性久久久久久久| 亚洲欧美日韩在线不卡| 亚洲电影一级黄| 国产精品视频免费在线观看| 欧美jizzhd精品欧美巨大免费| 亚洲一二三四区| 欧美激情一区在线观看| 久久九九久久九九| 亚洲在线成人精品| 日韩午夜在线播放| 伊人影院久久| 一本色道久久综合狠狠躁篇的优点 | 亚洲午夜视频在线| 91久久久久久国产精品| 国产一区av在线| 国产精品久久久久久久久久免费| 美日韩精品免费| 久久久99国产精品免费| 欧美亚洲一区二区在线| 中文日韩在线| 99在线精品免费视频九九视| 欧美国产日韩一区二区在线观看 | 一本色道久久88精品综合| 亚洲福利免费| 一区在线视频| 在线成人小视频| 精品成人一区| 在线观看欧美| 伊人久久男人天堂| 在线免费观看视频一区| 激情自拍一区| 亚洲电影观看| 亚洲黄色一区| av成人手机在线| 一二三区精品| 亚洲一区视频在线| 亚洲免费小视频| 先锋影音国产精品| 久久国产精品色婷婷| 久久久久91| 欧美插天视频在线播放| 欧美激情第六页| 亚洲日韩中文字幕在线播放| 亚洲大片在线| 亚洲美女中文字幕| 亚洲一区在线观看免费观看电影高清| 在线综合亚洲| 欧美一区二区在线免费播放| 久久久久一区二区| 欧美aa在线视频| 欧美视频精品在线| 国产婷婷精品| 亚洲黄色片网站| 亚洲一区二区三区涩| 久久av一区二区三区亚洲| 看欧美日韩国产| 亚洲精品免费一二三区| 亚洲欧美区自拍先锋| 久久久亚洲影院你懂的| 欧美黄色免费| 国产伦精品一区二区三| 亚洲第一二三四五区| 亚洲图中文字幕| 久久久久久亚洲精品不卡4k岛国| 欧美成人免费大片| 亚洲图片欧美午夜| 久久一区视频| 欧美午夜女人视频在线| 国内自拍一区| 一区二区三区亚洲| 久久综合久久久| 亚洲激情偷拍| 久久国产精品99国产| 欧美久久一级| 国内精品久久久久影院色| 日韩天天综合| 久久一区二区三区四区五区| 亚洲美女视频网| 可以免费看不卡的av网站| 国产精品你懂的在线| 亚洲国产高清在线| 久久国产综合精品| 一区二区日本视频| 美女尤物久久精品| 国精品一区二区| 午夜宅男欧美| 亚洲免费大片| 久久福利一区| 亚洲视频一二| 欧美三区美女| 日韩网站在线观看| 欧美国产日韩一区二区在线观看 | 欧美国产日韩在线| 久久精品首页|