In the switch-case statements declaration-with-initialization is invalid but declaration-and-then-assignment is allowed. As shown in the following code snippet.
What is difference between these two type of initializations from the compiler side? And why is the first type of initialization invalid and second type a valid one.
switch(val)
{
case 0:
int newVal = 42; //Invalid
break;
case 1:
int newVal2; //Valid
newVal2 = 42;
break;
case 2:
break;
}
In fact, neither are legal C++. You cannot declare a variable in a switch case unless it is scoped:
The fact that your compiler permits case 1 is a defect of your compiler, or possibly an extension. At least, according to the standard.