Инкремент C++

Рейтинг: 0Ответов: 1Опубликовано: 03.11.2014
#include <iostream>

using namespace std;

int main()
{
    int x = 1;
    int y = 1;
    y = x + (x++);

    cout << "y=" << y << endl << "x=" << x;
    return 0;
}

Почему y равен трем, а не двум?

Ответы

▲ 1Принят

Инкремент оставляет после себя копию объекта, каким он был до изменения.

Поскольку первым выполняется выражение в скобках (x++), то оно заменятся аналогичной копией (1), а сам x увеличивается до 2. Следующим шагом идет сложение копии с самим значением x, которое к этому времени уже увеличилось. Вот и получается y = 2 + (1);


А вообще тут все зависит метода вычисления компилятором значений и если он будет другим, то выражение будет равно двум. Если стандарт накладывает требования на такой порядок(а мне лень лезть в стандарт), то все нормально, иначе undefined behavior.