如题。有很多类似的问题,但我会给出不同的例子:我有 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()
方法更容易遵循,并且不太容易出现问题(忘记最后的 else
与 if
、else if
一起使用;使用赋值运算符 =
而不是等价运算符 ==
;不小心使用了二进制按位 AND &
运算符而不是二进制逻辑 AND &&
运算符等)。
switch()
方法的唯一潜在缺点是忘记在每个 case 下放置一个 break
语句,但您可以使用 CppCheck或 enable -Wswitch-fallthrough
在此类事件中导致编译器警告或失败。
编辑
忘记提及在开关中始终有一个 default
大小写。我总是假设这是给定的。
所以,使用:
-Wswitch-default
:在 switch 语句中强制使用默认情况。- 我的观点是正确的,
-Wswitch-fallthrough
尚未实现。太糟糕了,因为 clang 已经有一段时间了。将 CppCheck 作为构建/QA 流程的一部分,以避免因这种疏忽而受到影响。
关于c++ - Switch 或 else if 语句——C++ 中更清楚的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735778/