14 AnswersNew Answer
@Sreejith This question should not appear in any exam. If it does, you can write any answer and appeal if you are marked wrong for that specific question.
The operation does not go blindly from left to right. ++a is evaluated prior to statement execution, a becomes 2. Printing a++ will return 2, and then a gets incremented to 3. Note: prefix and postfix operators increment the value of a variable and store it back to the variable. The value is not incremented just for that instance.
@Sreejith Did you even compile the code. Your statements would be correct if the code was separated on single lines: int a = 1; cout << a++; cout << ++a; cout << a; will return 133, but not for our case here in original post. In fact, the behaviour of multiple prefix/postfix operators on a single continuous line of output code (either through cout or printf) is undefined and is up to the compiler. http://www.parashift.com/c++-faq-lite/misc-technical-issues.html#faq-39.15
@Seeejith I compiled the code as it is both on Code Playground and desktop compiler. It returned 233 in both environments. The site I tried to link to may have been down for some time now. This is the original source: https://stackoverflow.com/questions/5204805/explanation-of-call-ordering-in-a-cout-statement-postfix-vs-prefix Also: https://stackoverflow.com/questions/18174498/how-is-the-postfix-and-prefix-increment-operator-evaluated-in-an-expression This isn't just about 'the concept of postfix'.
@Sreejith I don't know. :D We can deduce the logic behind the compiler's decisions, but cannot predict the decision of a compiler. Hence, all our answers are correct for each of our own specific compiler.
Sreejith, this is called "undefined behaviour" and is compiler dependent. https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points
@hatsy @karl T. So if this question appears in any exam which answer should be given
because a++ is increments value of a after ++a is increments value of a before a is the new value printed a=1 at start of the program then a++ increments it's value by 1 so now it's 2 then again it is Pre increment ++a so now it's value is 3 then a will be printed it's present value is 3 so output is 233
I'm surprised the preprocessor does not even complain about the lack of space between #include and <stdio.h>
@hatsy I compiled it on 2 apps both gave me 133 but playground gave me 233 So according to the post you mentioned 133, 231, 221, 233 are all legal answers on different compilers based on their settings and priority now what is the correct answer to this question ?? or is there any one correct standard answer to this question??
both of your answers are wrong it is 133 not 233 or 221 because a++ is post increment ,so value of a will be incremented next time you use the value.so it displays "1". ++a is pre increment, its value will be increased and displayed.so its displays "3". (2 from previous increment) finally a, after all the increments, the value of a has changed to "3".
@hatsy did you compile it?? I dont think you understand the concept of post fix and your reference site not working
answer can be very depends upon the compiler due to unspecified behaviour
@hatsy Rei operation will go from right to left