在枚举类型上使用std :: max是不好的做法吗?

时间:2018-07-12 19:31:51

标签: c++ enums

我有两个enum对象ab,我想获得两个中的最大值。这是我所拥有的:

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

MyEnum max_val = std::max(TWO, THREE);

这在我的机器上工作正常(max_val被分配为THREE的值)。但是,我想知道这是否是一种好习惯,或者将其转换为int来进行任何比较操作是否更好,例如:

MyEnum max_val = static_cast<MyEnum>(std::max<int>(TWO, THREE));

2 个答案:

答案 0 :(得分:6)

您不需要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处-值必须是可比较的并且可复制构造(枚举值是)。

答案 1 :(得分:2)

enum的默认基础类型必须至少为int的宽度,并且必须为整数类型。这意味着在其上使用std::max是完全有效且定义明确的。

如果需要确保可以自己指定类型:

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