dem*_*nes 3 c++ constructor exception
我有这个测试代码来处理构造函数中的异常.function f()创建一个异常除以零,但不捕获此异常.相反,如果我抛出一个自定义整数,则捕获异常.
#include <iostream>
using namespace std;
class A
{
public:
void f(){
int x;
x=1/0;
//throw 10;
}
A(){
try{
f();
}
catch(int e){
cout << "Exception caught\n";
}
}
};
int main (int argc, const char * argv[])
{
A a;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我能抓住自定义投掷10; 而不是x = 1/0;
除以零的整数不是标准C++异常.所以你不能依赖于隐式抛出的异常.特定的编译器可能会将除以0的值除以某种异常(您需要检查编译器文档),如果是这样,您可以捕获该特定异常.但请注意,这不是可移植行为,并不适用于所有编译器.
你可以做的最好是自己检查错误条件(除数等于零)并明确地抛出异常.
class A
{
public:
void f()
{
int x;
//For illustration only
int a = 0;
if(a == 0)
throw std::runtime_error( "Divide by zero Exception");
x=1/a;
}
A()
{
try
{
f();
}
catch(const std::runtime_error& e)
{
cout << "Exception caught\n";
cout << e.what();
}
}
};
Run Code Online (Sandbox Code Playgroud)