Hello, The postincrement operator does NOT have a higher priority than assignment. First, the assignment is done, then the increment is done. The preincrement operator has a higher presedence than assignment (++x). With preincrement, first the variable is incremented then the result is assigned. And your problem is not with operator presedence. Let me explain you what happens for x step by step: 1. x is created in the memory and the value 10 is assigned 2. x is assigned to x, in other words value of x is set to value of x (so x is 10) 3. The value stored in x is incremented by 1 (so now x is 11) 4. x is printed to the stdout (the printed value is 11) In your code it seems as if you are trying to print the old value of x (the value before the increment). For this to happen you should use z = x++; cout << "x = " << z << '\n'; instead of x = x++; cout << "x = " << x << '\n'; This way you will be able to print the old value. To make the things quite clear 1. x is created in the memory and the value 10 is assigned 2. x is assigned to z, in other words value of z is set to value of x (so z is 10) 3. The value stored in x is incremented by 1 (so now x is 11) 4. z is printed to the stdout (the printed value is 10). I hope my explanation contains the answer to your question. Verdi March wrote:
Hi, I'd like to ask a (basic) question about operator post inc (lvalue++). I've this code fragment:
/**************/ int y = 10; int z; z = y++; cout << "z = " << z << '\n';
int x = 10; x = x++; cout << "x = " << x << '\n'; /**************/
The execution results in: z = 10 x = 11
I'm confused why x became 11, because the post inc. operator has higher precedence than assignment, so given an expressoin x = x++, x++ is evaluated first. The signature for post inc. is T operator++(int). So the return value of x++ is 10 (x itself will be modified to 11), but then the expression of x = (x++) become x = ret_val_of_x_plus_plus, which is x = 10? Am I correct?
Regards, Verdi
-- Sedat Dogru __________________________________________________ blue tec IT services ag Sedat Dogru Project Manager Kleinhadernerstr. 40 80689 München Germany +49 - 89 - 700 76 43- 46 mail: sdogru@blue-tec.net internet: www.blue-tec.net