c++ - Switch 或 else if 语句——C++ 中更清楚的是什么

标签 c++ if-statement enums switch-statement

如题。有很多类似的问题,但我会给出不同的例子:我有 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() 方法更容易遵循,并且不太容易出现问题(忘记最后的 elseifelse if 一起使用;使用赋值运算符 = 而不是等价运算符 ==;不小心使用了二进制按位 AND & 运算符而不是二进制逻辑 AND && 运算符等)。

switch() 方法的唯一潜在缺点是忘记在每个 case 下放置一个 break 语句,但您可以使用 CppCheckenable -Wswitch-fallthrough在此类事件中导致编译器警告或失败。

编辑


忘记提及在开关中始终有一个 default 大小写。我总是假设这是给定的。

所以,使用:

  • -Wswitch-default:在 switch 语句中强制使用默认情况。
  • 我的观点是正确的,-Wswitch-fallthrough 尚未实现。太糟糕了,因为 clang 已经有一段时间了。将 CppCheck 作为构建/QA 流程的一部分,以避免因这种疏忽而受到影响。

关于c++ - Switch 或 else if 语句——C++ 中更清楚的是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35735778/

相关文章:

c++ - MFC,在内存上下文中绘制文本(打印)

c++ - void* 强制转换为 char* 而不是左值?

c++ - 如何获得 if 表达式的哪一部分为真?

python文件逐行读取并检查条件,如果不为真则等待其为真而不跳过该行

java - java如何支持java枚举常量的实例变量?

c++ - constexpr 重载

c++ - BitBlt 仅捕获部分屏幕

excel - VBA For 循环,其中每个答案必须 = True

sql - 使用表在 MySQL 中提供枚举值?

java - 通过键检索在线服务器数据库