8

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

int main(void)
{
    int result = 0;
    // Some calculation
    Ensures(result == 255);
    return 0;
}

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

4

1 回答 1

12

您正在使用Microsoft GSL 实施吗?然后,如果您检查gsl_assert.h文件,您将看到 ifGSL_TERMINATE_ON_CONTRACT_VIOLATION已定义(这是默认值),然后Ensures将调用std::terminate这将为您提供您得到的错误。

如果您希望抛出异常(带有文件和行号信息),那么您需要GSL_THROW_ON_CONTRACT_VIOLATION在包含 GSL 之前进行定义。

至于您是否Ensures正确使用,那么是的。


2021 年更新

GSL_TERMINATE_ON_CONTRACT_VIOLATION被删除,总是调用terminate().

于 2016-04-01T06:48:59.977 回答