我是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,则不执行。跟踪执行情况,但是似乎什么也没发生,因为它们都在程序结束时保持初始化值。
我很困惑。有人知道幕后会发生什么吗?
答案 0 :(得分:3)
当编译器看到case语句case N
时,它将始终将N
解释为整数。在这种情况下,您的编译器会将表达式1,2,3
评估为3。仅在/* do something */
为3时才执行ival
代码。(已在MSVS2015中进行测试)。
正如您所指出的,此表达式不是表达您希望多个案例由同一代码处理的正确方法,并且您应该期望其他编译器以不同的方式处理这种情况。