具有重复的枚举器值
Having duplicate enumerator values
本文关键字:枚举 更新时间:2023-10-16
我正在C++中创建一个俄罗斯方块克隆,并且我有一个枚举GameProperty
,其指定如下:
enum GameProperty {
NUM_OF_TETROMINOES = 7,
NUM_OF_TILES = 4,
TETROMINO_ROTATIONS = 4
};
在我的情况下,当循环通过tetromino的瓦片时,我仅使用这些值,例如:
for (int i = 0; i < TETROMINO_TILES; i++) { }
在任何情况下,拥有多个具有相同值的枚举器都被认为是不好的做法吗?
这些不应该是单个enum
中的值。它们应该是单独的常量。要了解原因,请查看类似i < TETROMINO_TILES
的代码。将integer
与可以具有类似TETROMINO_ROTATIONS
的值的GameProperty
进行比较。这毫无意义。
当您想要创建一个新的、不同的类型,而并不是真正的标量值时,请使用enum
。例如,颜色可以被枚举,因此可以被编号,但这些数字实际上并不意味着什么。
如果你正在为枚举器分配有意义的数字,这表明你可能真的想要这样的东西:
namespace GameProperty { // completely different concepts with unifying theme
int const num_tetrominoes = 7,
num_tiles = 4,
num_rotations = 4;
};
现在,您可以使用相同的语法以及using
声明,并且这些常量在for
循环和表达式中工作,不需要转换。
例如,以下两项都是正确的,但不应在enum
和int
之间交换:
namespace wavelengths { // closely related quantities
typedef int wavelength_t; // maybe we will express in-between values
wavelength_t const red = 750,
green = 550,
blue = 400;
};
enum colors { // qualitatively different but related as one-of-many
red,
green,
blue;
};
定义枚举就像定义类一样。从概念上讲,它应该是一个属性值的集合,而不是装配多个属性。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 打印没有铸件的枚举可以在C++中吗?
- 枚举成员与静态 int 成员?
- C++:枚举:错误:应使用标识符而不是"}"
- 带有 c++ 的枚举(输入检查)
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 为什么 int 类型的枚举类值不能用作 int
- 在 C++ 中输出枚举类类型的向量元素