Также для лучшего понимания вы можете рассмотреть следующие свободно описанные примеры:
- представьте pre -инкремент для
the_object
из the_type
как функцию, подобную этой:
the_object = the_object + 1;
return the_object;
- теперь вспомним Post -инкремент для
the_object
из the_type
как функцию, подобную этой:
the_type backup_of_the_object;
backup_of_the_object = the_object;
the_object = the_object + 1;
return backup_of_the_object;
Теперь рассмотрим:
result = counter++ + 10;
Когда программа компилируется:
- компилятор видит
result =
в начале строки, поэтому он
сначала следует определить, что находится справа от =
и затем создайте машинный код, чтобы присвоить его левой стороне
=
что составляет result
.
- компилятор видит
counter
но оператор не закончился
потому что ;
еще не достигнуто. Так что теперь он знает, что это
также должен что-то делать с counter
.
компилятор видит ++
, но оператор не закончился. Так что теперь это
знает, что он должен рассмотреть создание машинного кода для выполнения
counter++
первый.
компилятор видит +
. Так что теперь он знает, что он должен учитывать
создание машинного кода для добавления правой стороны +
и
левая сторона +
, которая была counter++
.
Компилятор видит 10;
и, наконец, оператор закончился. А сейчас
он знает все, что нужно было знать! Он знает, что после производства
машинный код для выполнения counter++
, он должен произвести
машинный код для добавления 10 к output_of it. Тогда это должно
создайте машинный код для присвоения output_of этому
result
.
при запуске программы:
- ЦП должен работать
counter++
теперь counter
увеличивается на 1, следовательно, это 11 , но output_of (counter++
) является предыдущим значением counter
10
- ЦП должен работать output_of (
counter++
) + 10
сейчас output_of ( output_of (counter++
) + 10) равно output_of (10 + 10), что 20
- ЦП должен работать
result =
результат_ ( результат_ (counter++
) + 10)
сейчас result
- 20
Также обратите внимание, что все описанные этапы были только о
result = counter++ + 10;
независимо от того, что произойдет потом. Значение до
cout << "Counter: " << counter << endl;
cout << "Result: " << result << endl;
так очевидно, прежде чем main()
вернет 0.
По-моему, вы должны успокоиться и научиться этому на опыте, написав и запустив некоторые программы!
Удачи!