确保() - 指南支持库

NJM*_*JMR 7 c++ c++11 cpp-core-guidelines guideline-support-library

我试图了解如何Ensures()在代码中使用.如示例中所示,如果我尝试使用Ensures()如下...

int main(void)
{
    int result = 0;
    // Some calculation
    Ensures(result == 255);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果result变量不等于255,程序将使用以下输出崩溃"terminate called without an active exception".我的问题是如何Ensures()正确使用?

Som*_*ude 10

您使用的是Microsoft GSL实现吗?然后,如果你检查gsl_assert.h头文件,你会看到,如果GSL_TERMINATE_ON_CONTRACT_VIOLATION被定义(这是默认值),然后Ensures将调用std::terminate它会给你你的错误.

如果要抛出异常(包含文件和行号信息),则需要GSL_THROW_ON_CONTRACT_VIOLATION在包含GSL之前进行定义.

至于如果你Ensures正确使用,那么你是.

  • 根据核心指南作者的决定,MS GSL 最近删除了“GSL_THROW_ON_CONTRACT_VIOLATION”,现在始终删除“std::terminate”。但是......仍然有一个讨论正在进行,因为核心指南似乎对于“期望”的行为不一致。 (3认同)