gpt4 book ai didi

c++ - 恢复 VC++ 9.0 下的异常规范行为

转载 作者:搜寻专家 更新时间:2023-10-31 00:49:20 26 4
gpt4 key购买 nike

我正在处理严重依赖语言标准中描述的异常规范行为的旧代码。即,在违反下述形式的异常规范时调用 std::unexpected()。

foo() throw(T) { /*...*/ }

Nothrow 规范确实保证不会抛出,但是 throw(T) 规范预计会被设计 和...好吧,因为标准期望并提供了一种机制来处理它。

这与设计者决定将 EH 用作异常处理之外的错误处理机制(由其自身的错误类层次结构控制)有关。 EH 中提供的成语与他们的需求密切相关,他们选择了最省力的方法。至少我是这样认为的,考虑到系统的规模和复杂性,这对我来说并不特别令人震惊。

但是,我现在的任务是包含新的和不相关的功能,并且代码在 VC++ 9.0 下的行为不符合预期,因为偏离了 8.0 中引入的异常规范的标准。 (引用:Microsoft)

我正试图找到一种强制执行标准行为的方法。希望编译器提供回退。但是没有。

我是不是运气不好,需要更改在 350,000 行代码上运行的正确编写的符合标准的代码,并具有完全开发的错误处理类层次结构?或者你能想出一种方法来帮助我强制执行 std::unexpected() 行为吗?

编辑:我正在提供一些背景信息。有问题的系统是一个学校的学年日历生成器,为分布在 4,000 多名学生中的学校提供​​服务,我不确定其中的一些数字,6 个年级和约 190 个类(class),外加 12 个虚拟(远程教学)类。 MINGW 和 VC++ 8.0 或 9.0 以外的任何编译器都不可能。这是由于与服务于该国家/地区的教育系统的软件有关的法规。

代码所需的更改正是为了适应引入具有截然不同的日历生成架构的虚拟类。然后我遇到了这个问题。该软件在日历生成过程的几个部分大量使用异常机制,作为通过 unexpected() 映射(保存和恢复)和 bad_exception 映射控制工作流的一种方式,这些都不能在 VC++ 下工作。纯粹就个人而言,我发现现有的机制实际上非常优雅,即使完全不常见。但我离题了。

最佳答案

我不相信 Visual C++ 异常规范行为曾经(或声称已经)符合标准 - 甚至在 8.0 之前 - 所以我不确定应用程序是如何工作的。

执行以下更改是否可行:

void f() throw(T)
{
// ...
}

到:

void f()
{
try
{
// ...
}
catch (T)
{
throw;
}
catch (...)
{
app_unexpected();
}
}

关于c++ - 恢复 VC++ 9.0 下的异常规范行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416094/

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