gpt4 book ai didi

c++ - 对 std::runtime_error 与 std::logic_error 感到困惑

转载 作者:IT老高 更新时间:2023-10-28 14:00:55 31 4
gpt4 key购买 nike

我最近看到,如果命令行输入不可解析,boost program_options 库会抛出 logic_error。这挑战了我对 logic_errorruntime_error 的假设。

我认为逻辑错误(logic_error 及其派生类)是由于内部未能遵守程序不变量而导致的问题,通常以内部 API 的非法参数的形式出现。从这个意义上说,它们在很大程度上等同于 ASSERT,但旨在用于已发布的代码(与通常不编译为已发布代码的 ASSERT 不同。)它们在无法将单独的软件组件集成到调试/测试版本中的情况下很有用或者失败的后果是向用户提供有关无效不变条件的运行时反馈非常重要。

同样,我认为 runtime_error 完全是由程序员无法控制的运行时条件引起的:I/O 错误、无效的用户输入等。

然而,program_options 显然被大量(主要是?)用作解析最终用户输入的一种手段,因此在我的心智模型下,它当然应该在输入错误的情况下抛出 runtime_error

我哪里错了?你同意异常类型的 boost 模型吗?

最佳答案

在这种情况下,我认为(至少在大多数情况下)你是对的,它是错的。该标准将 logic_error 描述为:

The class logic_error defines the type of objects thrown as exceptions to report errors presumably detectable before the program executes, such as violations of logical preconditions or class invariants.

无法解析的命令行参数似乎不太适合。

相比之下,它将 runtime_error 描述为:

The class runtime_error defines the type of objects thrown as exceptions to report errors presumably detectable only when the program executes.

这似乎更合适。

关于c++ - 对 std::runtime_error 与 std::logic_error 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2924058/

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