使用什么而不是例外?

时间:2012-11-09 09:26:25

标签: c++ exception

我正在使用c ++而且我是一个非常嵌套的函数集,并且发生了一个特殊情况,我想退出到顶层。

现在我听说c ++异常现在已被弃用,所以在这种情况下我应该使用什么呢?

所以我真正要问的是,c ++代码中的setjmp()longjmp()是否正常?

2 个答案:

答案 0 :(得分:11)

C ++例外不推荐使用只有例外规范被弃用 两者之间存在差异。你应该使用RAII和例外。

答案 1 :(得分:4)

如果可能的话,我会避免在C ++代码中使用setjmp/longjmp作为大多数C的东西。对于C ++异常的问题,据我所知,他们已弃用。实际上,我认为在不严重阻碍向后兼容性的情况下,很难弃用这种普遍的功能。您可能已经听说过(某种形式的)异常规范最新C ++ 11标准的一个功能,该功能在以前的语言版本中没有出现,在批准过程中已被弃用(例如,参见Herb Sutter博客上的this post)。

这就是说,C ++中的异常并不容易使用。 C ++有很多功能,有时它们以非常复杂的方式相互作用。一些必要(但不充分)的建议是:

  • std::exception;
  • 中获取您的例外情况
  • 通过RAII管理您的资源;
  • 通过引用捕获,而不是通过值或指针捕获。

但最好的建议是:准确理解异常是如何工作的 - 预先安排的建议不能很好地运作。出于此目的,您可以阅读有关如何使用例外和RAII的thisthisthisthis。特别是“更有效的C ++”有一整章致力于异常,暴露了明显简单的代码片段的一些错综复杂的后果。它提高了你对语言的整体认识。