Я в программировании совсем новечек, но в той книге [1], по которой я учу С++, этот вопрос рассматривается.
Ты просто ошибся в приоритетах.
Если: y = ++x + ++x;
То не: (y = ++x) + ++x;
А: y = (++x) + (++x);
Но есть тонкий момент. В выражении y = (++x) * (++x) результат будет не 6 а 9!!!
2---------3
// test.cpp
#include <iostream>
using namespace std;
void main()
{
int x = 1, y;
y = (++x) * (++x); // обрати внимание, выполнятеся в таком порядке !
cout << "y = " << y << ' ' << "x = " << x;
cin.get();
}
// результат: y = 9 x = 3
// КАК ПРОИСХОДИТ ВЫЧИСЛЕНИЕ
// Если x = 1, и надо x + 3, то знчение из х копируется в ячейку tmp, затем
// 3 добавляется к тому, что в ячейке tmp, и в конце то, что в tmp перезаписывается
// поверх x.
// tmp = ++x; // x = 2, tmp = 2
// tmp = ++x; // x = 3, tmp = 3
// y = tmp * tmp; так как х = 3, то, х * х = 9.
То есть, умножаются два окончательных значения х! Более того, СТАНДАРТОМ С++ ЭТИ ПРАВИЛА НЕ РЕГЛАМЕНТИРУЮТСЯ и в одном компиляторе может быть 6 (Turbo C++ 3.0), а в другом - 9 (Visual C++ 6.0 и g++)!
Цитирую последнию строчу из раздела о инкременте и декримете из своей книги:
Цитата:
"Следует просто избегать таких запутанных ситуаций и не смешивать разные формы операторов в одном выражении".
|
[1]Д.А. Клюшин, "Полный курс С++", Диалектика 2004.