开关箱中"case"常量是否有变量类型?

Is there a variable type for the constant in a "case" in the switch-case?

本文关键字:变量 类型 常量 case 开关箱 是否      更新时间:2023-10-16

假设我们有:

unsigned char test;
test=0xff;
switch (test)
  {
  case -1:
    cout<<"hit 1";
    break;
  case 255:
    cout<<"hit 2";
    break;    
  }

为什么它给出"hit 2",而-1可以在内存中表示为无符号字符的0xff。是否有一个类型的常数(这里-1和255)在一个"case"在切换大小写?据我所知,没有变量类型,我们无法比较两个变量

标准规定:

6.4.2交换机语句[stmt.switch]
  1. switch语句根据条件的值将控制转移到几个语句中的一个。

  2. 条件应为整型、枚举型或类型。如果是类类型,则在上下文中隐式地将条件转换为整型或枚举类型(第4条)。执行积分提升。 switch语句中的任何语句都可以用一个或多个case标签标记为:

    case constant-expression :

,其中常量表达式应为转换后的常量表达式(5.19),与开关条件的提升类型一致。转换为开关条件的提升类型后,同一开关中的两个case常量不得具有相同的值。

数据类型为int,因为所有较小的整型都升格为int

因为unsigned char从0-255你有溢出