dav*_*vka 13 c++ error-handling exception-handling try-catch
令人惊讶的是,我无法通过谷歌搜索和搜索SO找到答案(在SO上有很多类似的问题,但与其他语言有关).
我怀疑答案是肯定的no.如果是这样,会有明显的不便,例如
try
{
std::string fname = constructFileName(); // can throw MyException
ofstream f;
f.exceptions(ofstream::failbit | ofstream::badbit);
f.open(fname.c_str());
// ...
}
catch (ofstream::failure &e)
{
cout << "opening file " << fname << " failed\n"; // fname is not in the scope
}
catch (MyException &e)
{
cout << "constructing file name failed\n";
}
Run Code Online (Sandbox Code Playgroud)
如果我的假设是正确的,你如何处理这个?通过std::string fname;移出try,我想?
我理解范围是由一个{}块定义的,但这似乎是一个合理的例子,例如,嗯.是否抛出异常导致对象无法完全构造的原因是什么?
Jam*_*lis 21
catch块是否共享块的范围try?
没有.
你怎么处理这个?通过
std::string fname;移出try,我想?
是.
我理解范围是由一个
{}块定义的,但这似乎是一个合理的例子,例如,嗯.是否抛出异常导致对象无法完全构造的原因是什么?
C++需要的最后一件事是规则更复杂的规则和例外.:-)
有一个明显的原因:你不能相信在try块中创建的对象的状态.那里的代码被异常打断了,他们的构造函数可能还没有运行.