代码之家  ›  专栏  ›  技术社区  ›  Yksisarvinen

用C++ 17强制枚举无效值

  •  3
  • Yksisarvinen  · 技术社区  · 6 年前

    在我们的项目中,枚举通常用于与其他组件通信。这是旧代码,所以C++主要使用非固定类型的枚举枚举。

    出于UT的目的,我们想测试一下当我们收到无效的enum值时(它来自不同的组件,所以我们不能100%正确)。当enum有一些“空”值时,一切正常,这些值没有使用,但仍在有效范围内。但让我们考虑以下枚举:

    enum Foo {
        Foo_A,
        Foo_B,
        Foo_C,
        Foo_D
    }
    

    根据C++ 17标准,我们可以 static_cast

    如果我们需要从有效范围之外传递值怎么办?我想检查我的函数在传递值时是否反应正确(返回错误)。 4 .

    如何避免UB并仍然测试可能无效的枚举值?

    1 回复  |  直到 6 年前
        1
  •  2
  •   MSalters    6 年前

    这里的问题是“未定义行为”的范围包括“没有任何明显异常的工作”。无法测试是否发生未定义的行为。

    相反,你需要写一个手册 铸造前 >=Foo_A <= Foo_D