switch语句和增量运算符

Avi*_*mar 3 c++ switch-statement post-increment

我写了以下代码:

int i = 0;  
switch(i++)  
{
   case 0:  
     cout << 0;  
   case 1:  
     cout << 1;
}  
cout << "\n" << i;  
Run Code Online (Sandbox Code Playgroud)

代码的输出是这样的:

01  
1
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释第一行输出?为什么0和1都被打印?

Jon*_*Jon 18

首先,表达式i++(后增量运算符)的计算结果为0(即使它将值设置i为1).因此,在内部switch,case 0:分支被选中.

然后,因为break在你之后没有case 0:,程序继续执行case 1:标签中的代码.

总结一下,你有:第一个switch分支为0 ,第二个分支为1,另一个为1,因为这是最终值i.


dan*_*n78 7

因为您需要break在每个案例之后添加一个,这会阻止执行以下语句.例如

switch(i++)  
{
   case 0:  
     cout<<0;  
     break;
   case 1:  
     cout<<1;
     break;
}  
Run Code Online (Sandbox Code Playgroud)

不可否认,第二次休息是多余的,但我只是为了保持一致而把它放在那里