对于switch语句中的所有情况都使用相同的命令?

Deb*_*ger 2 c c++ goto switch-statement

我有一个switch语句,其中每个case都有唯一的代码,以及除默认标签之外的所有案例共享的一些代码.有不同的案例标签之间有共享命令的好方法吗?

编辑:代码示例

switch (c)
{
    case '+':
        command.type = ADD;
        commands.push_back(command);
        break;
    case '-':
        command.type = SUB;
        commands.push_back(command);
        break;
    case '>':
        command.type = INC;
        commands.push_back(command);
        break;
    case '<':
        command.type = DEC;
        commands.push_back(command);
        break;
    case '.':
        command.type = PUT;
        commands.push_back(command);
        break;
    case ',':
        command.type = GET;
        commands.push_back(command);
        break;
    default: break;
Run Code Online (Sandbox Code Playgroud)

mol*_*ilo 11

保持一个std::mapchar任何类型command.type.
我们称之为command_table.

然后:

switch (c)
{
    case '+':
    case '-':
    case '>':
    case '<':
    case '.':
    case ',':
        command.type = command_table[c];
        commands.push_back(command);
        break;
    default: break;
}
Run Code Online (Sandbox Code Playgroud)

或者,更短,并且额外的好处是忘记案件更难:

auto it = command_table.find(c);
if (it != command_table.end())
{
    command.type = it.second;
    commands.push_back(command);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您有地图,那么您不需要切换 (5认同)
  • *"我们称之为`命令`."*或者让它称之为与已经定义的名为`commands`的矢量不冲突的东西. (4认同)

ste*_*anv 5

  • 将标志设置为true
  • 在交换机的默认情况下,将标志设置为false
  • 如果标志为true,则运行公共代码.

类似于以下内容:

bool MyPushBackFlag = true;
switch (c)
{
    case '+':
        command.type = ADD;
        break;
    case '-':
        command.type = SUB;
        break;
    case '>':
        command.type = INC;
        break;
    case '<':
        command.type = DEC;
        break;
    case '.':
        command.type = PUT;
        break;
    case ',':
        command.type = GET;
        break;
    default: MyPushBackFlag = false; break;
}

if (MyPushBackFlag)
     commands.push_back(command);
Run Code Online (Sandbox Code Playgroud)

  • `if(flag == true)`我讨厌这个:( (3认同)