Enum C ++按索引获取

时间:2008-11-26 19:09:39

标签: c++ enums

我在C ++中想知道如果我有一个枚举,我可以访问第二个索引的值吗?例如,我有

enum Test{hi, bye};

如果我想要'hi',我可以做一些像Test [0],感谢。

7 个答案:

答案 0 :(得分:26)

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

enum Test {
  hi, // 0
  bye // 1
}

这意味着索引只会转化为文字值。

Test EnumOfIndex(int i) { return static_cast<Test>(i); }

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

答案 1 :(得分:10)

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

enum Test
{
    hi, //0
    bye, //1
    count //2
}

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

(Test)0;
//or
Test(0);

让您可以执行以下操作:

for(int i = 0; i < count; i++)
{
    DoSomething((Test)i);
}

答案 2 :(得分:1)

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

int myInteger = 0;
Test myValue = (Test)myInteger;

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

答案 3 :(得分:1)

取决于你所说的“我想要'你好'”。

如果你的意思是你想要这个值,那么你可以通过转换int得到它,正如其他人所说的那样。

将数字文字转换为枚举类型通常毫无意义 - 如果您知道您期望的值,则可以使用该名称。这样,枚举可以在不破坏代码的情况下进行更改。我想有可能发生了一些非常奇怪的事情,有人创建了一个枚举,并记录了“3”的意思,但不记录它的枚举值。但是你想要修复API。

如果您有序列化数据,则将运行时已知的整数值转换为枚举可能会有所帮助。只要您知道它在枚举范围内,就会定义结果。

如果你的意思是你想要字符串“hi”,那么你就不能拥有它。与Java不同,在C ++中,枚举类型中的值的名称仅在编译时存在,而不是在运行时,并且仅在一个方向上映射。

答案 4 :(得分:0)

不,但你可以从int

转换
Test test = (Test)0;

答案 5 :(得分:0)

你最好的选择可能是这样的:

enum Test{hi = 0, bye};

然后你可以简单地用数字0表示'hi',用1表示'bye'。

虽然这实际上违背了首先使用枚举的全部目的。

答案 6 :(得分:0)

如果您要将{Hi或bye}返回的值除外,那么您无法获得这样的值。

我不建议这样做是为了获得实际值,但它可以用作黑客

.slanted:after {
    content: "";
    background: red;
    height: 80px;
    transform: skewY(-5deg);
    position: absolute;
    left: 0;
    right: 0;
    z-index: -1;
}

对枚举进行类型转换将再次返回索引,但您可以分配给其他枚举变量