Здравствуйте Андрей Тарасевич, Вы писали:
АТ>Здравствуйте Silver_s, Вы писали:
SS>>post decrement/increment должен выполняться после вычисления значения выражения, но что нужно понимать под выражением?
SS>>Или стандартом не оговорено когда надо делать пост операции?
АТ>Не оговорено. Все побочные эффекты должны возыметь место до следуюшей точки следования. Точнее сказать нельзя.
АТ>Постинкремент означает, что в выражении будет использовано значение переменной до инкремента. А когда кокретно поизойдет сам инкремент — никто не знает. Инкремент, если так захочет компилятор, может произойти даже до использования значения переменной в выражении.
АТ>Например, вот такой С++ код
АТ>АТ>int a, b;
АТ>...
АТ>a = b++ + 5;
АТ>
АТ>компилятор, если захочет, может странслировать вот в такой результирующий код
АТ>АТ>mov eax, b
АТ>inc b
АТ>add eax, 5
АТ>mov a, eax
АТ>
АТ>т.е. собственно инкремент переменной 'b' делается еще до того, как будет выполнено сложение с 5 и переменная 'a' получит новое значение. Тем не менее код ведет себя так, как должен вести себя именно постинкремент.
Позволю не согласится
оператор + есть функция от двух переменных
перепишем его в виде plus(a, b)
таким образом
a++ + b
эквивалентно
plus(a++, b)
а здесь уже a+1 внутрь передаваться не будет никогда.
Может я чего-то не понимаю ???