-2

我正在使用 c++ 并且我处于一组非常嵌套的函数中,并且发生了一种特殊情况,我想退出到顶层。

现在我听说 c++ 异常现在已被弃用,那么在这种情况下我应该使用什么来代替?

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

4

2 回答 2

11

C++ 异常被弃用,只有异常规范被弃用。
两者是有区别的。您应该使用 RAII 和异常。

于 2012-11-09T09:28:04.287 回答
4

如果可能的话,我会避免setjmp/longjmp在 C++ 代码中像大多数 C 语言一样使用 。据我所知,对于 C++ 异常,它们并没有被弃用。事实上,我认为在不严重阻碍向后兼容性的情况下,要弃用这样一个普遍的特性是非常困难的。您可能听说过(某种形式的)异常规范这是最新的 C++11 标准的一个特性,该特性在该语言的先前版本中不存在,在批准过程中已被弃用(参见,例如,this发表在 Herb Sutter 的博客上)。

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

  • std::exception从;派生你的例外
  • 通过 RAII 管理您的资源;
  • 通过引用而不是通过值或指针捕获。

但最好的建议是:准确了解异常是如何工作的——预先确定的建议效果不佳。为此,您可能会阅读thisthisthisthis以了解如何使用异常和 RAII。特别是“更有效的 C++”有一整章专门讨论异常,揭示了看似简单的代码片段的一些复杂后果。它提高了你对语言的整体意识。

于 2012-11-09T09:50:50.677 回答