Because precedence of ,
operator is lower than of =
one, this...
a=b+2,b*5;
... will actually be evaluated as...
a = b + 2;
b * 5;
With int i = b + 2, b * 5;
is a bit different, because comma has different meaning in declaration statements, separating different declarations from each other. Consider this:
int a = 3, b = 4;
You still have comma here, but now it separates two variable assignment-on-declarations. And that's how the compiler attempts to treat that line from your example - but fails to get any meaning from b * 5
line (it's neither assignment nor declaration).
Now, int a = (b + 2, b * 5)
is different: you assign a value of b + 2, b * 5
expression to a variable a
of type int
. The first sub-expression is discarded, leaving you just with b * 5
.