C++ 确保()-指南支持库

C++ 确保()-指南支持库,c++,c++11,cpp-core-guidelines,guideline-support-library,C++,C++11,Cpp Core Guidelines,Guideline Support Library,我正在努力理解如何在代码中使用assures()。如中所示,如果我尝试使用确保(),如下所示 int main(void) { int result = 0; // Some calculation Ensures(result == 255); return 0; } 如果结果变量不等于255,程序将崩溃,并出现以下输出“终止调用,无活动异常”。我的问题是如何正确使用assures() 您是否正在使用?然后,如果您检查,您将看到如果定义了违反合同的GSL\u

我正在努力理解如何在代码中使用
assures()
。如中所示,如果我尝试使用
确保()
,如下所示

int main(void)
{
    int result = 0;
    // Some calculation
    Ensures(result == 255);
    return 0;
}
如果
结果
变量不等于
255
,程序将崩溃,并出现以下输出
“终止调用,无活动异常”
。我的问题是如何正确使用
assures()

您是否正在使用?然后,如果您检查,您将看到如果定义了违反合同的
GSL\u TERMINATE\u(默认),那么
将确保
将调用,这将给出您得到的错误

如果希望抛出异常(包含文件和行号信息),则在包含GSL之前,需要定义
GSL\u THROW\u ON\u CONTRACT\u违例行为

如果你使用
确保了
的正确性,那么你是正确的


2021年更新
GSL\u终止合同\u违反
的行为被删除,始终调用
TERMINATE()

感谢您的回复,我将检查标题。我没有使用MS GSL。我尝试在Visual Studio 2013中使用MS GSL。但得到的是“致命错误C1001:编译器中发生了内部错误”。根据您的建议,我进入了“gsl lite.h”,并将测试0的#define gsl_CONFIG_THROWS_修改为测试1的#define gsl_CONFIG_THROWS_。现在我得到了一个例外,我可以抓住它。谢谢。根据核心指南作者的决定,MS GSL最近删除了违反合同的GSL,现在总是
std::terminate
s。但是由于核心指导原则似乎与
Expects
的行为不一致,因此仍在进行讨论。如果您的示例中调用了
std::terminate
,那么它将按原样工作。