我有两个enum
对象a
和b
,我想获得两个中的最大值。这是我所拥有的:
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));
答案 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
};