C ++成功的`try`分支

时间:2017-09-26 10:45:02

标签: c++ try-catch

让我们考虑一些人为的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但也许有一些常见的漂亮解决方法?

2 个答案:

答案 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语句中使用它吗?这是糟糕的设计,您可以简单地将所有代码分别放在trycatch之后的大括号中。