gpt4 book ai didi

c++ - 您是否打算从违反契约(Contract)中恢复过来?

转载 作者:行者123 更新时间:2023-12-04 12:15:26 25 4
gpt4 key购买 nike

使用指南支持库和实用程序,如 gsl_Expects C++ 暂时实现了契约(有计划在 future 将这些东西烘焙到语言中)。使用此功能并根据您的项目设置,可能会违反契约(Contract):

  • 抛出异常或
  • 调用终止

  • 我想知道恢复策略应该是什么。很明显,在第二种情况下(您设置契约(Contract)违规以调用终止),没有,但即使在第一种情况下也很难恢复;由于异常属于某种内部类型(例如 fail_fast 派生自 logic_error ),因此很难构建恢复策略:我应该捕获什么异常,在哪个级别,是否有有用的信息可以帮助我恢复(我认为 file+line 是为了让人类读者进行事后分析)。
    因此,鉴于所有这些,我的问题是: 您是否打算从违反契约(Contract)中恢复过来?如果是如何? 有没有消息来源描述如何做到这一点?如果不是,将我的错误检查+处理与契约(Contract)检查分开并且只从硬错误的角度考虑契约(Contract)是个好主意吗?
    我想我倾向于第二种选择,但令人讨厌的是,这些违规行为会导致我的整个程序崩溃,而不是使单个函数无效。
    我可以像这样构建合约承载功能:
    std::optional<return_t> my_function(Arg arg)
    {
    std::optional<return_t> ret;

    try {
    gsl_Expects(...); // do contract checking
    /* rest of function */
    } catch (fail_fast& e) {
    // report contract violation
    }

    return ret; // Exceptions from contract violations are turned into empty optional
    // Other exceptions are handled like before (locally or from the caller)
    }
    但感觉这超出了使用合约的目的。

    最佳答案

    您不打算从契约(Contract)错误中恢复过来。契约(Contract)错误是程序中的逻辑错误,换句话说,您的程序是错误的。没有什么可行的方法可以从中恢复,您能做的最好的事情就是杀死并重新启动发生故障的整个子系统,并希望这是一次罕见的故障。
    您可以预期的异常情况不应该由契约(Contract)处理,这就是异常机制的用途。

    关于c++ - 您是否打算从违反契约(Contract)中恢复过来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68437225/

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