C++ switch 常量的问题

img


这里是 a<6

img


为什么换成 a<66,结果就报错了。不仅是66,7也会报错,为什么呀。

因为多个case 中表达式的运算结果不能有相同的值。
a是7
第一个
case a<1:是比较运算,结果为 0(也就是假值)
第二个
case a>6:结果为 1(也就是真值)

两个case 中一个0,一个1是不相同的值,可以。

如果第二个是case a>66:结果也是0
两个case 的值都是0,相同了,就会出错。
就等于是

switch (a)
{
    case 0:
    case 0:
    break;
    default:
    break;
}

另外
switch (a) 应该改成 switch (1)
case a>1: 中是比较运算,结果为 0 或者 1 ,要判断是否等于1。而不是判断是否等于a

case 后面只能跟一个值,你用 a<6,其实是一个表达式,当a为7时,你的代码相当于
swtich(7)
{
case 0:
...
case 1:
...
}
这时候两个case值不同,所以编译可以通过。
当改为a>7时,相当于case 0,两个case 0是不可以的

case 后面必须是常量,不能为关系表达式,想达到什么效果呢?帮你改一下。

switch的作用是将一个值(变量或常量)和一堆常亮进行比较,它不是if,不可以把两个变量互相比较
如果你的a是个变量,那么你的case a<1就直接报错了
但是因为你的a是个常量,所以在编译阶段编译器就能计算出一个确定的结果,把a<1用0代替