代码之家  ›  专栏  ›  技术社区  ›  Ben Jones Tim Goetz

使用STD::在枚举类型上最大值是坏的吗?

  •  2
  • Ben Jones Tim Goetz  · 技术社区  · 8 年前

    我有两个 enum 物体 a 和 b 我想得到这两个的最大值。以下是我的资料:

    enum MyEnum {
        ZERO,
        ONE,
        TWO,
        THREE
    };
    
    MyEnum max_val = std::max(TWO, THREE);
    

    这在我的机器上工作正常(最大值被指定为3)。不过,我想知道这是否是一个好的实践,或者更好的方法是 int 要执行任何比较操作,例如:

    MyEnum max_val = static_cast<MyEnum>(std::max<int>(TWO, THREE));
    
    2 回复  |  直到 8 年前
        1
  •  6
  •   Neil Butterworth    8 年前

    你不需要 static_cast -这很好:

    #include <algorithm>
    
    enum MyEnum {
        ZERO,
        ONE,
        TWO,
        THREE
    };
    
    MyEnum e = std::max( ZERO, ONE);
    

    要求 std::max 在 https://en.cppreference.com/w/cpp/algorithm/max -值必须是可比较的且可复制构造的,枚举值是。

        2
  •  2
  •   Hatted Rooster    8 年前

    默认的基础类型 enum 必须至少是 int 必须是整型。这意味着使用 std::max 它是完全有效和明确的。

    如果要确保:

    enum MyEnum : int {
        ZERO,
        ONE,
        TWO,
        THREE
    };