如这里所述:https://stackoverflow.com/a/58498330当使用
setjmp
和longjmp
,并返回到setjmp
的范围时,所有可访问对象都具有与函数时相同的值longjmp
被称为.
我对此感到困惑,因为
longjmp
把我们带到了程序中一个完全不同的地方,在那里我们调用longjmp
时的局部变量是零意义的。那么当变量都不同时,值怎么会“相同”呢?
这里的关键词是accessible。通过调用
longjmp
展开的堆栈部分的局部变量不再存在,因此不再可访问。故事结束。
值得指出的是,这些变量的析构函数(如果有的话)不会被调用。因此,不要在 C++ 代码中使用
longjmp
。改用 C++ 异常处理,它以受控方式展开堆栈。
关于什么accessible变量恢复和不变存在误解
参考短语是:
返回到
的范围后,抽象机的所有可访问对象、浮点状态标志和其他组件都具有与执行setjmp
时相同的值,除了非易失性局部变量在std::longjmp
的范围内,如果自setjmp
调用以来它们的值已更改,则其值是不确定的。setjmp