让我们说:
unsigned char test;
test=0xff;
switch (test)
{
case -1:
cout<<"hit 1";
break;
case 255:
cout<<"hit 2";
break;
}
为什么它给出“命中2”,而-1可以在内存中表示为无符号字符的0xff。 在案例中的“案例”中是否有常量(此处为-1和255)的类型? 据我所知,没有变量类型,我们无法比较两个变量。
答案 0 :(得分:2)
标准说:
6.4.2 switch语句
[stmt.switch]
switch语句会根据条件的值将控制转移到多个语句之一。
- 醇>
条件应为整数类型,枚举类型或类类型。如果是类类型,则将条件在上下文中隐式转换(第4节)为整数或枚举类型。 执行整体促销。 switch语句中的任何语句都可以标记为一个或多个案例标签 如下:
case
constant-expression
:
其中常量表达式应为转换条件的提升类型的转换常量表达式(5.19)。在转换为提升类型的开关条件后,同一开关中的两个外壳常数不应具有相同的值。
数据类型为int
,因为所有较小的整数类型都会提升为int
。
答案 1 :(得分:0)
因为unsigned char
从0到255,所以你有溢出。