我正在努力了解如何在代码中使用Ensures()
。如示例所示,如果我尝试按如下方式使用Ensures()
。。。
int main(void)
{
int result = 0;
// Some calculation
Ensures(result == 255);
return 0;
}
如果result
变量不等于255
,程序将崩溃,并输出以下"terminate called without an active exception"
。我的问题是如何正确使用Ensures()
?
您使用的是Microsoft GSL实现吗?然后,如果你检查gsl_assert.h
头文件,你会发现如果定义了GSL_TERMINATE_ON_CONTRACT_VIOLATION
(这是默认的),那么Ensures
会调用std::terminate
,这会给你得到的错误。
如果希望抛出异常(包含文件和行号信息),则需要在包含GSL之前定义GSL_THROW_ON_CONTRACT_VIOLATION
。
至于你是否正确使用Ensures
,那么是的。
2021年更新
GSL_TERMINATE_ON_CONTRACT_VIOLATION
被移除,总是调用terminate()
。