setjmp()/
longjmp()完全颠覆了堆栈展开,因此也破坏了异常处理以及RAII(通常是析构函数)。
从标准的18.7 / 4“其他运行时支持”开始:
如果将引发控制权转移到程序中另一个(目标)点的抛出异常将破坏任何自动对象,则
longjmp(jbuf,val)在将控制权转移到同一(目标)点的抛出点上的调用具有未定义的行为。
因此,最重要的是
setjmp()/
longjmp()在C ++中不能很好地发挥作用。

setjmp()/
longjmp()完全颠覆了堆栈展开,因此也破坏了异常处理以及RAII(通常是析构函数)。
从标准的18.7 / 4“其他运行时支持”开始:
如果将引发控制权转移到程序中另一个(目标)点的抛出异常将破坏任何自动对象,则
longjmp(jbuf,val)在将控制权转移到同一(目标)点的抛出点上的调用具有未定义的行为。
因此,最重要的是
setjmp()/
longjmp()在C ++中不能很好地发挥作用。