案例“错误列表”:会发生什么?

时间:2018-08-13 14:19:32

标签: c++ switch-statement

我是C ++的新手。据我所知,

switch(ival)
{
    case 1,2,3:
    /* do something */
    /* other case selections */
}

是错误的。正确的方法是编写:

switch(ival)
{
    case 1: case 2: case 3: // in multiple lines if you prefer
    /* do something */
    /* other case selections */
}

也就是说(希望它是正确的),当您编译第一个时会发生什么? Visual Studio intellisense检测到错误,但是程序可以正常编译。

我做了一些实验,我敢打赌,如果ival为1,他将执行“做某事”,但如果它为2或3,则不执行。跟踪执行情况,但是似乎什么也没发生,因为它们都在程序结束时保持初始化值。

我很困惑。有人知道幕后会发生什么吗?

1 个答案:

答案 0 :(得分:3)

当编译器看到case语句case N时,它将始终将N解释为整数。在这种情况下,您的编译器会将表达式1,2,3评估为3。仅在/* do something */为3时才执行ival代码。(已在MSVS2015中进行测试)。

正如您所指出的,此表达式不是表达您希望多个案例由同一代码处理的正确方法,并且您应该期望其他编译器以不同的方式处理这种情况。