【发布时间】:2011-08-31 19:42:39
【问题描述】:
我是一名 C++ 程序员,习惯使用具有良好异常处理能力的 OO 语言。
据我了解,setjmp 和 longjmp 本质上是一种 c 风格的传播异常条件的方法。它们似乎也是一种强烈的 goto 形式,可以向上传播堆栈。
所以,首先:在这个时间点直接在 C 中使用这些是一种好习惯,还是被弃用? (注意:C 不是 C++)。
其次,它们在 C++ 中是否有用,或者我认为它们是被 C++ 的异常处理功能取代的遗留机制是否正确?
【问题讨论】:
-
您不能在信号处理程序中抛出异常,但您可以安全地执行
longjmp-- 只要您知道自己在做什么。 -
@Dietrich:对您的评论 +1。这是一个鲜为人知且完全被低估的事实。如果不使用信号处理程序中的
longjmp,有许多问题无法解决(讨厌的竞争条件)。阻塞系统调用的异步中断就是典型的例子。