gpt4 book ai didi

c++ - 跳出 try block 是否合法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:25:22 25 4
gpt4 key购买 nike

我有一些代码是从一个非常聪明的人那里继承的,他们喜欢使用 gotos 离开 try block ,完全绕过 catch block 。

它绝对有效,我怀疑这是合法的(我认为 C++ 标准规定在退出作用域时,所有内容都会被正确清理,我假设这适用于编译器为实现异常而必须做的任何事情我的平台)。

这真的合法吗?这不是我写过的东西(它太聪明了一半),但它显然有效,我只是想了解为什么这样可以。

最佳答案

它可以是合法的,这取决于代码的作用。比如我写过一个catch block 跳出的代码,用在一个语言的runtime库中(为简单起见,使用runtime库的代码并没有实现itanium的异常处理,而是使用longjmp/setjmp实现的)。然而,运行库通过 C++ 异常,确实使用了它;并且需要一种机制来在它们之间干净地转移控制。

try {
doSomethingThatMayFail();
} catch(DiagnosticException&) {
goto unwind;
}

if(0) {
unwind:
longjmp(&lastSafePoint, 0);
}

我把它写成一个宏,写起来很方便。此处的 goto 是清理在诊断异常的异常处理期间分配的资源所必需的。

与往常一样,不要说“永远不要使用此功能”。相反,每次使用都必须仔细考虑。

关于c++ - 跳出 try block 是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11458830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com