switch语句和递增运算符

我写了以下代码:
int i = 0;  
switch(i++)  
{
   case 0:  
     cout << 0;  
   case 1:  
     cout << 1;
}  
cout << "n" << i;  
代码的输出是这样的:
01  
1
任何人都可以解释第一行输出?为什么0和1都被打印?     
已邀请:
首先,表达式
i++
(后增量运算符)求值为0(即使它将
i
的值设置为1)。所以在
switch
内,选择了
case 0:
分支。 然后,因为在你的
case 0:
之后没有
break
,程序继续执行
case 1:
标签中的代码。 总结一下,你有:第一个
switch
分支为0,第二个分支为1,另一个为1,因为这是
i
的最终值。     
因为你需要在每个案例之后添加一个
break
,这会阻止执行以下语句。例如。
switch(i++)  
{
   case 0:  
     cout<<0;  
     break;
   case 1:  
     cout<<1;
     break;
}  
不可否认,第二次休息是多余的,但我只是为了保持一致而把它放在那里     
你需要把“休息”在每个案件的最后。     
switch是一个奇怪的结构。它来自C,Java和C#也采用它,所以它不被认为是完全“非OO”。 开启状态哪个更改是有效的OO概念,但通常用于基于类型的切换。 特别是编译器通常创建一个“跳转”表,这意味着它是O(1)被调用的代码块,这与嵌套的“if”语句不同。您可能有多个值(不包括默认值)跳转到同一点,因此除非您明确插入“break”语句,否则代码块会“相互碰撞”。 这是在C中完成的,并且已经保留用于C ++。 关于开关中的值,它必须是数值但不必是常量。在你的情况下,
i++
评估为0但是将i增加到1.这是明确定义的行为,这里的序列点没有问题。     

要回复问题请先登录注册