在c ++中try-catch块的catch中使用了什么参数?

时间:2015-04-27 14:51:44

标签: c++

我读了一个使用try-catch块的代码。 以下是代码的一部分:

class powers {
int x;

public:
powers() { x = 0; }
powers(int n) { x = n; }
};

int main() 
{
    powers *p;

    try {
        p = new powers[5]; 
    } 
    catch (bad_alloc xa) {
        cout << "Allocation Failure\n"; 
        return 1;
    }
}

我假设尝试尝试了一些东西,catch正在捕捉try语句中的任何不匹配或失败。 但是捕获中使用了哪些参数?

2 个答案:

答案 0 :(得分:2)

try是一个语句,因此它可以出现在语句可以出现的任何地方。它旨在允许您处理异常。

try
{
    //this code may throw!
}

try阻止之后,必须有一个或多个处理块(或简称:处理程序),它们被定义为catch块:

catch(const std::exception& e)
{
}
catch(const MyException& e)
{
}
...

catch块的形式参数确定可以捕获的异常类型(并导致输入该块)。

  

当复合语句(E块)中的任何语句抛出类型try的异常时,它将与每个catch的形式参数T的类型进行匹配 - 子句(catch块)[...],按列表中的catch子句的顺序排列。如果满足以下任何条件,则例外是匹配:

     
      
  • ET属于同一类型(忽略T上的顶级cv限定符)
  •   
  • T是对(可能是cv-qualified)E
  • 的左值引用   
  • TE
  • 的明确公共基类   
  • T是对E
  • 的明确公共基类的引用   
  • T是一个(可能是cv限定的)指针或对const指针的引用(因为C ++ 14),而E也是一个指针,它可以隐式转换为{{ 1}}
  •   
  • T是指向成员的指针或指针或对const指针的引用(自C ++ 14起),而TE
  •   

来源:try-block

答案 1 :(得分:-3)

异常提供了一种通过将控制转移到称为处理程序的特殊函数来对程序中的异常情况(如运行时错误)作出反应的方法。

要捕获异常,一部分代码将置于异常检查之下。这是通过将该部分代码包含在try-block中来完成的。当在该块内出现异常情况时,抛出异常将控制转移到异常处理程序。如果没有抛出异常,代码将继续正常并忽略所有处理程序

http://www.cplusplus.com/doc/tutorial/exceptions/