gpt4 book ai didi

c++ - 使用枚举作为数组索引

转载 作者:IT老高 更新时间:2023-10-28 13:23:40 25 4
gpt4 key购买 nike

我有这个枚举:

enum ButtonState {
BUTTON_NORMAL = 0,
BUTTON_PRESSED = 1,
BUTTON_CLICKED = 2
};

const u8 NUM_BUTTON_STATES = 3;

在我的 Button 类中,我有成员变量 ButtonState state;ButtonColors colors[NUM_BUTTON_STATES];。绘制按钮时,我使用 colors[state] 来获取按钮所处状态的颜色。

我的问题:

  1. 这是好的编程风格吗?有更好的方法吗? (我通常只使用带有 switch 语句的枚举......使用枚举作为数组索引感觉不对。)
  2. 我是否来指定枚举的值?它似乎默认从 0 开始并以 1 递增,但它是否保证在所有编译器中都以这种方式工作?

最佳答案

这是好的编程风格吗?

我想是的。我经常做同样的事情。

有更好的方法吗?

class Button
{
public:
// Used for array indexes! Don't change the numbers!
enum State {
NORMAL = 0,
PRESSED,
CLICKED,
NUMBER_OF_BUTTON_STATES
};
};

缺点是 NUMBER_OF_BUTTON_STATES 现在是一个有效的 Button::State 值。如果您将这些值作为 ints 传递,这不是什么大问题。但是如果你真的期待一个Button::State,那就麻烦了。

使用枚举作为数组索引感觉不对。

没关系。只需DOCUMENT它,让下一个人知道发生了什么! (这就是评论的用途。)

我必须指定枚举的值吗?

如果没有 '=' 赋值,枚举的应该从零开始并向上递增。

如果枚举条目具有“=”赋值,则后续非“=”枚举条目从那里继续计数。

来源:注释 C++ 引用手册,第 113 页

也就是说,我喜欢指定初始值只是为了让代码更清晰。

关于c++ - 使用枚举作为数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/404231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com