catch Blocks如何计算(C++)

C++ 可以引发任何类型的异常,不过,通常建议引发标准:从派生的类型: 异常。 对. C++ 异常可以捕获由指定类型和引发的异常相同的 catch 处理程序,也可以由捕获任何类型的异常的处理程序。

如果引发的异常类型是类,它还具有基类 (或类),它可能由接受异常类型的基类的处理程序捕获,以及对异常类型的基础。 请注意,如果异常是由引用捕获,它绑定到实际时引发的异常对象;否则,为副本 (和函数的参数相同)。

引发异常时,既可以由 catch 处理程序的以下类型捕获:

  • 可以接受任何类型的处理程序 (使用省略号语法)。

  • 接受类型和异常对象相同的处理程序;因为它是副本, const 和 volatile 修饰符被忽略。

  • 接受对类型和异常对象相同的处理程序。

  • 接受对类型的 const 或 volatile 窗体和异常对象相同的处理程序。

  • 接受类型的基类和异常对象相同的处理程序;因为它是副本, const 和 volatile 修饰符被忽略。 基类的 catch 处理程序不能位于该派生类的 catch 处理程序。

  • 接受对类型的基类和异常对象相同的处理程序。

  • 接受对类型的基类的 const 或 volatile 窗体和异常对象相同的处理程序。

  • 接受指针引发的指针对象可以通过标准指针转换规则转换的处理程序。

catch 处理程序出现的顺序是很重要的,因此,因为特定 尝试 的处理程序块中检查遵循其外观的序列。 例如,它是将基类的处理程序中的错误在派生类中处理程序。 在查找后匹配的 catch 处理程序,后续处理程序不会检查。 因此,省略号 catch 处理程序必须是其 尝试 的最后一个处理程序块。 例如:

// ...
try
{
    // ...
}
catch( ... )
{
    // Handle exception here.
}
// Error: the next two handlers are never examined.
catch( const char * str )
{
    cout << "Caught exception: " << str << endl;
}
catch( CExcptClass E )
{
    // Handle CExcptClass exception here.
}

在此示例中,省略号 catch 处理程序已检查的唯一处理程序。

请参见

参考

C++异常处理