There is no "the answer". That is not well-defined C++. The existing C++ 2011 standard is based on the 1999 C standard, which still says it's illegal. Few, if any, compilers actually report that as an error, though, and the "error" status has been removed from C as of the 2011 standard, and will presumably be removed from C++ on the next round.
Either way, the result is not defined. You'll get different results from Visual C++ and GNU g++, typically. You may get different results from "debug" versus "optimized" builds on the same compiler. None of those results is better than any of the others.
The general ideas are that (with a few exceptions) C++ does not define the order in which it evaluates the arguments to operators, and also does not specify how long afterward the increment happens in a postfix ++ or -- operation.
In general, don't "use the value of a variable" in one part of an expression and change the value in another part of the same expression; and don't modify a variable more than once in the same expression. This is not exact. It's ok to use a guaranteed previous value of a variable as part of calculation of new value for that variable. x = x + 1; is obviously legal.
The ISO C and C++ standards are prohibitively €xpen$ive, but you can get a look at the free draft of the next verision of C++ at:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf
Don't be put off by the title page. This is so early in the process that the only changes to the C++11 published standard are actually document corrections.
A late draft for the C11 specification can still be found at:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1539.pdf
The rules are in section 6.5 (Expressions) in the C specification. I don't expect you "get it" from those PDFs, but take a look and you can see what textbook writers (and programmers!) are up against when trying to make officially-correct documentation and programs.