代码之家  ›  专栏  ›  技术社区  ›  Jon Purdy

在C++中使用安全的方法是使用SETJMP()和LangJMP()吗?

  •  4
  • Jon Purdy  · 技术社区  · 14 年前

    setjmp() longjmp() This MSDN page 但是,表示可以告诉Microsoft实现调用本地对象的析构函数,这意味着谨慎使用这些函数可能是安全的。

    使用时是否有确保程序正确性的可移植方法 setjmp() 在C++中?C++中的最佳实践表明异常最好不用于流控制,但是在需要非常不寻常的流(例如,协同程序和闭包)的情况下,总是最好使用异常来代替这些功能吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Collin Dauphinee    14 年前

    如果您有一些非常奇怪的需求,不允许您使用条件/循环/中断来正常控制程序流,那么我更愿意使用异常而不是jmp。

    在某些情况下,使用异常来控制流是可以接受的。我想是其中一个Boost.Graph的搜索函数抛出一个异常,以便从深度递归快速返回到调用方。

        2
  •  1
  •   Jesse Jashinsky    14 年前

    我的理解是,在处理低级代码(如操作系统)时,它们用于异常处理。对于一般的C++软件,我只需要使用 try catch