让我们考虑一些人为的C ++代码:
int i = 0;
try { someAction(); }
catch(SomeException &e) { i = -1; }
i = 1;
... // code that uses i
我希望此代码在-1
抛出异常的情况下将i
分配给someAction()
,如果没有异常则分配1
。正如您现在所看到的,此代码是错误的,因为i
最终总是变为1
。当然,我们可以制定一些技巧,比如:
int i = 0;
bool throwed = false;
try { someAction(); }
catch(SomeException &e) { throwed = true; }
i = throwed ? -1 : 1;
... // code that uses i
我的问题是:C ++中是否存在类似“成功尝试分支”的内容,如果在try块中没有任何抛出,我会执行一些操作? 类似的东西:
int i = 0;
try { someAction(); }
catch(SomeException &e) { i = -1; }
nocatch { i = 1; }
... // code that uses i
当然,C ++中没有nocatch
但也许有一些常见的漂亮解决方法?
答案 0 :(得分:12)
int i = 0;
try { someAction(); i = 1; }
catch(SomeException &e) { i = -1; }
答案 1 :(得分:0)
除了简单的解决方案
try
{
someAction();
i = 1;
}
catch(SomeException &e)
{
i = -1;
}
您应该考虑计划在代码中进一步使用i
的值 - 在if
语句中使用它吗?这是糟糕的设计,您可以简单地将所有代码分别放在try
和catch
之后的大括号中。