c++ - Ensures() - 指南支持库

标签 c++ c++11 cpp-core-guidelines guideline-support-library

我想了解如何在代码中使用 Ensures()。正如 example 中给出的那样,如果我尝试使用 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 implementation ?那么如果你检查 the gsl_assert.h header file您会看到,如果定义了 GSL_TERMINATE_ON_CONTRACT_VIOLATION(这是默认设置),则 Ensures 将调用 std::terminate这会给你你得到的错误。

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

至于你是否正确地使用了 Ensures,那么是的。


2021 年更新

GSL_TERMINATE_ON_CONTRACT_VIOLATION 已删除,始终调用 terminate()

关于c++ - Ensures() - 指南支持库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36349523/

相关文章:

c++ - 这段代码使用复制构造函数时出错 - C++08

java - iOS 上的 UnsatisfiedLinkError 而不是 Android,loadLibrary 总是成功

c++ - 为什么有人会使用 set 而不是 unordered_set?

c++ - 为什么我们不应该对 gsl::not_null 使用指针运算?

c++ - 模板化构造函数可以代替已删除的复制构造函数吗?

c++ - 无法在剪辑嵌入式应用程序中断言事实

multithreading - 使用 std::atomic 在 C++11 中编写线程安全的双端队列

c++11 - g++ 无法在模板类中查找静态函数,这是一个错误还是标准定义的?

c++ - 我如何使用 gsl::span 并指示所有权?

c++ - 传递 span<T> 和 std::array 作为参数有什么区别?