我读了一个使用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语句中的任何不匹配或失败。 但是捕获中使用了哪些参数?
答案 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子句的顺序排列。如果满足以下任何条件,则例外是匹配:
E
和T
属于同一类型(忽略T
上的顶级cv限定符)- 的左值引用
T
是对(可能是cv-qualified)E
- 的明确公共基类
T
是E
- 的明确公共基类的引用
T
是对E
T
是一个(可能是cv限定的)指针或对const指针的引用(因为C ++ 14),而E
也是一个指针,它可以隐式转换为{{ 1}}T
是指向成员的指针或指针或对const指针的引用(自C ++ 14起),而T
是E
。
来源:try-block。
答案 1 :(得分:-3)
异常提供了一种通过将控制转移到称为处理程序的特殊函数来对程序中的异常情况(如运行时错误)作出反应的方法。
要捕获异常,一部分代码将置于异常检查之下。这是通过将该部分代码包含在try-block中来完成的。当在该块内出现异常情况时,抛出异常将控制转移到异常处理程序。如果没有抛出异常,代码将继续正常并忽略所有处理程序