【发布时间】:2009-03-16 16:29:30
【问题描述】:
const int MIN_NUMBER = 4;
class Temp
{
public:
Temp(int x) : X(x)
{
}
bool getX() const
{
try
{
if( X < MIN_NUMBER)
{
//By mistake throwing any specific exception was missed out
//Program terminated here
throw ;
}
}
catch (bool bTemp)
{
cout<<"catch(bool) exception";
}
catch(...)
{
cout<<"catch... exception";
}
return X;
}
private:
int X;
};
int main(int argc, char* argv[])
{
Temp *pTemp = NULL;
try
{
pTemp = new Temp(3);
int nX = pTemp->getX();
delete pTemp;
}
catch(...)
{
cout<<"cought exception";
}
cout<<"success";
return 0;
}
在上面的代码中,throw false 是在 getX() 方法中使用的,但由于人为错误(!)false 被遗漏了。看似无辜的代码使应用程序崩溃。
我的问题是为什么当我们抛出“nothing”时程序会终止?
我不太了解throw; 基本上是“重新抛出”,必须在异常处理程序(catch)中使用。在任何其他地方使用这个概念都会导致程序终止,那么为什么编译器在编译期间不引发标志?
【问题讨论】: