在枚举类型上使用std::max是不是一种糟糕的做法
Is it bad practice to use std::max on enum types?
我有两个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));
您不需要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
};
相关文章:
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 在枚举类型上使用std::max是不是一种糟糕的做法
- std::元组大小,是不是错过了优化?
- boost::P rogram_options 一种判断值是从命令行还是 ini 文件的方法?
- 拥有相同方法的静态和非静态版本是不是设计不好
- 他是不是很贪婪
- 在DLL中分配内存并将其指针提供给客户端应用程序,这是不是一种糟糕的做法
- 在C++代码中使用C风格的注释是不是一种糟糕的做法
- 矢量的一种交换方式是可能的
- 在main.cpp中而不是在头文件中定义函数是不是一种糟糕的做法
- 重载一个函数同时获取指针或引用是不是一种糟糕的做法
- 让子对象引用其父对象而不是指针,这是不是一种糟糕的做法
- 嵌套渲染循环是不是一种糟糕的做法
- 在操作数据成员时:以下哪一种被认为是最佳实践
- 运算符==对其操作数进行变异是不是一种糟糕的做法
- 在c++中,依赖局部对象以相反的构造顺序被析构是不是一种不好的做法?
- 将函数代码与预处理器指令混合在一起是不是一种糟糕的做法
- C++:为了便于访问,在类中使用静态容器来包含指向其所有对象的指针是不是一种糟糕的做法
- POCO C++SAX解析器:如果xml文档编码是ANSI,那么下一条语句不是读取并抛出编码错误异常