在案例中的“案例”中,常量是否有变量类型?

时间:2014-06-19 19:38:50

标签: c++ switch-statement

让我们说:

unsigned char test;
test=0xff;

switch (test)
  {
  case -1:
    cout<<"hit 1";
    break;
  case 255:
    cout<<"hit 2";
    break;    
  }

为什么它给出“命中2”,而-1可以在内存中表示为无符号字符的0xff。 在案例中的“案例”中是否有常量(此处为-1和255)的类型? 据我所知,没有变量类型,我们无法比较两个变量。

2 个答案:

答案 0 :(得分:2)

标准说:

  

6.4.2 switch语句[stmt.switch]

     
      
  1. switch语句会根据条件的值将控制转移到多个语句之一。

  2.   
  3. 条件应为整数类型,枚举类型或类类型。如果是类类型,则将条件在上下文中隐式转换(第4节)为整数或枚举类型。 执行整体促销。 switch语句中的任何语句都可以标记为一个或多个案例标签   如下:

         

    case constant-expression :

  4.         
        
          
            

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

          
        
      

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

答案 1 :(得分:0)

因为unsigned char从0到255,所以你有溢出。