我在C ++中想知道如果我有一个枚举,我可以访问第二个索引的值吗?例如,我有
enum Test{hi, bye};
如果我想要'hi',我可以做一些像Test [0],感谢。
答案 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;
}
对枚举进行类型转换将再次返回索引,但您可以分配给其他枚举变量