Enum C++按索引获取

14 c++ enums

我想知道在C++中我是否有枚举可以访问第二个索引的值?比如我有

enum Test{hi, bye};
Run Code Online (Sandbox Code Playgroud)

如果我想'嗨',我可以做一些像Test [0],谢谢.

Jar*_*Par 26

是的,不是.如果你的枚举没有明确的值,那么就有可能.如果没有显式值,则枚举值按声明的顺序给出数值0-N.例如 ...

enum Test {
  hi, // 0
  bye // 1
}
Run Code Online (Sandbox Code Playgroud)

这意味着索引只是转换为文字值.

Test EnumOfIndex(int i) { return static_cast<Test>(i); }
Run Code Online (Sandbox Code Playgroud)

这当然在运行时进行0验证,并且一旦添加显式值,它就会崩溃.但它将在默认情况下工作.


xan*_*xan 10

除非另有说明,否则枚举开始编号为0,每个条目递增1.

enum Test
{
    hi, //0
    bye, //1
    count //2
}
Run Code Online (Sandbox Code Playgroud)

您可以将int转换为枚举的类型以获取所需的值,例如:

(Test)0;
//or
Test(0);
Run Code Online (Sandbox Code Playgroud)

这可以让你做以下事情:

for(int i = 0; i < count; i++)
{
    DoSomething((Test)i);
}
Run Code Online (Sandbox Code Playgroud)

  • 使用static_cast <Test>(i)代替(Test)i (8认同)

str*_*ger 3

枚举将名称映射到值。在您的情况下, (int)hi 的值为 0,(int)bye 的值为 1。您可以使用强制转换来获取 hi 的值:

int myInteger = 0;
Test myValue = (Test)myInteger;
Run Code Online (Sandbox Code Playgroud)

但请注意,如果 myInteger 超出范围,则 myValue 可能是无效的枚举值。