从字面上看,如果抛出的一个值与多个 catch 子句匹配,会发生什么?
编译器决定它还是出错?
以下是一个抛出一个值并匹配三个 catch 子句的示例。
我编译它并得到错误。但是不知道这个错误是什么意思...
#include <iostream>
using namespace std;
class AAA
{
public:
void ShowYou() { cout<<"AAA exception!"<<endl; }
};
class BBB : public AAA
{
public:
void ShowYou() { cout<<"BBB exception!"<<endl; }
};
class CCC : public BBB
{
public:
void ShowYou() { cout<<"CCC exception!"<<endl; }
};
void ExceptionGenerator(int expn)
{
if(expn==1)
throw AAA();
else if(expn==2)
throw BBB();
else
throw CCC();
}
int main(void)
{
try
{
ExceptionGenerator(1);
ExceptionGenerator(1);
ExceptionGenerator(1);
}
catch(AAA& expn)
{
cout<<"catch(AAA& expn)"<<endl;
expn.ShowYou();
}
catch(AAA& expn)
{
cout<<"catch(BBB& expn)"<<endl;
expn.ShowYou();
}
catch(AAA& expn)
{
cout<<"catch(CCC& expn)"<<endl;
expn.ShowYou();
}
system("pause"); return 0;
}
错误 1 错误 C2312: 'AAA &' : 在第 40 行被 'AAA &' 捕获
我得到上面的错误。
这是什么意思?