【发布时间】:2016-03-01 23:37:10
【问题描述】:
如标题。有很多类似的问题,但我会给出不同的例子:我有 2 个枚举
enum A
{
A_ONE,
A_TWO
};
enum B
{
B_ONE,
B_TWO
};
通过枚举 A 切换然后在所有情况下通过枚举 B 切换更清晰?
A type1;
B type2;
switch(type1)
{
case A_ONE:
switch(type2)
{
case B_ONE:
//statement1
break;
case B_TWO:
//statement2
break;
}
break;
case A_TWO:
switch(type2)
{
case B_ONE:
//statement3
break;
case B_TWO:
//statement4
break;
}
break;
}
或者使用else if
if(type1 == A_ONE && type2 == B_ONE)
//statement1
else if(type1 == A_ONE && type2 == B_TWO)
//statement2
else if(type1 == A_TWO && type2 == B_ONE)
//statement3
else if(type1 == A_TWO && type2 == B_TWO)
//statement4
哪种做法更好?你喜欢什么
【问题讨论】:
-
它们的用途不是同义词。 Switch 语句用于离散值已知并与之进行比较的情况; If 语句这样做,但也允许检查任何布尔表达式。有些事情你不能用 switch 语句来做,而你可以用 if 语句来做。
-
旁注:在这两种情况下,您都应该将枚举值命名为 ONE 和 TWO。它们已经被 A 和 B 限定了。您无需在名称中重复。
-
还有其他选择吗?由于合并
enum A和B这似乎相关,拆分为子功能(因此 2switch (type2)不会出现在switch(type1)... -
我无法合并它。这只是示例,但在我的代码中,这两个枚举并不相关。
-
@EJP:我不同意。不仅在风格上,而且因为除非您将枚举本身放在不同的范围内,否则what you suggest is impossible。请记住,它们将被命名为
A_ONE等,而不是A::A_ONE等。这很重要。
标签: c++ if-statement enums switch-statement