在枚举类型上使用std::max是不是一种糟糕的做法

Is it bad practice to use std::max on enum types?

本文关键字:一种 是不是 类型 枚举 max std      更新时间:2023-10-16

我有两个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));

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

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

如果想确保:,你可以自己指定类型

enum MyEnum : int {
ZERO,
ONE,
TWO,
THREE
};
相关文章: