相关疑难解决方法(0)

switch语句中的多个案例

有没有办法在不case value:反复陈述的情况下通过多个案例陈述?

我知道这有效:

switch (value)
{
   case 1:
   case 2:
   case 3:
      //do some stuff
      break;
   case 4:
   case 5:
   case 6:
      //do some different stuff
      break;
   default:
       //default stuff
      break;
}
Run Code Online (Sandbox Code Playgroud)

但是我想做这样的事情:

switch (value)
{
   case 1,2,3:
      //Do Something
      break;
   case 4,5,6:
      //Do Something
      break;
   default:
      //Do the Default
      break;
}
Run Code Online (Sandbox Code Playgroud)

这是我用不同的语言思考的语法,还是我错过了什么?

c# switch-statement

552
推荐指数
16
解决办法
79万
查看次数

逗号运算符如何工作

逗号运算符如何在C++中工作?

例如,如果我这样做:

a = b, c;  
Run Code Online (Sandbox Code Playgroud)

最终是否等于b或c?

(是的,我知道这很容易测试 - 只是在这里记录,以便有人快速找到答案.)

更新: 此问题在使用逗号运算符时暴露了细微差别.只是记录下来:

a = b, c;    // a is set to the value of b!

a = (b, c);  // a is set to the value of c!
Run Code Online (Sandbox Code Playgroud)

这个问题实际上是受到代码中的拼写错误的启发.打算做什么

a = b;
c = d;
Run Code Online (Sandbox Code Playgroud)

转换成

a = b,    //  <-  Note comma typo!
c = d;
Run Code Online (Sandbox Code Playgroud)

c++ comma-operator

165
推荐指数
6
解决办法
5万
查看次数

逗号运算符在switch语句中的含义是什么?

我收到了一个问题,并被要求提供输出.

int main(void){  
    int x = 2;  
    switch(x){  
        case 1,2,1: printf("Case 1 is executed");  
            break;  
        case 2,3,1: printf("Case 2 is executed");  
            break;  
        default : printf("Default case us executed");  
    }  
    return 0;  
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在Turbo C中给出了"Case 1 is execution"的输出,但是在代码块和在线编译时,它给出了编译器错误.

哪一个是正确的?这是编译器错误吗?如果没有,为什么代码只在Turbo C上运行?

c c++

27
推荐指数
2
解决办法
3171
查看次数

逗号运算符是否允许在C++ 11中使用常量表达式?

在针对C++ 11的SO上回答这个问题的过程中,我意识到在C++ 03(以及C)中,在常量表达式中明确禁止使用逗号运算符.

关于常量表达式的C++ 03标准的第5.19/1段说:

[...]特别是,除了sizeof表达式,不应使用函数,类对象,指针或引用,并且不得使用赋值,递增,递减,函数调用或逗号运算符.

但是,在C++ 11中,提到逗号运算符的最后一部分似乎已经消失了.虽然C++ 11标准的第5.19/2段明确规定赋值,递增,递减和非constexpr函数调用表达式不应作为常量表达式的子表达式出现,但逗号运算符的使用似乎不一致被禁止了.

例如,以下程序在GCC 4.7.2和Clang 3.3上编译良好std=c++11(除了编译器警告说逗号运算符没有效果且xarr变量未使用):

int main()
{
    constexpr int x = (0, 42);
    int arr[(0, 42)];
}
Run Code Online (Sandbox Code Playgroud)

但是,必须要说的是,即使是以下程序也可以使用-std=c++03选项(在Clang和GCC上)编译好,这显然是正确的,考虑到C++ 03标准的上述引用:

int main()
{
    int arr[(0, 42)];
}
Run Code Online (Sandbox Code Playgroud)

题:

关于逗号运算符是否允许在常量表达式中,或者我是否遗漏了某些内容,C++ 03和C++ 11之间是否存在差异?

作为一个奖励(非建设性)问题,我有兴趣知道为什么逗号运算符不能用在C++ 03中的常量表达式中.

c++ comma-operator language-lawyer constant-expression c++11

23
推荐指数
2
解决办法
1228
查看次数