Отличается ли реализация ++ i от i ++ от языка к языку? - PullRequest
1 голос
/ 07 сентября 2010

Я недавно прочитал: «У выражений (++ i) и (i ++) есть значения и побочные эффекты. Побочным эффектом является то, что значение в i увеличивается на 1. Значение (i ++) является значением до приращения и значение (++ i) является значением после приращения, но будет ли сначала увеличение или оценка, не является частью C. "

Я знаю, что в Java сначала выполняется оценочный шаг ... это же для всех других языков?

1 Ответ

2 голосов
/ 07 сентября 2010

По крайней мере в C ++ операторы могут быть перегружены, поэтому семантика ++i и i++ не гарантируется - их фактически можно перегружать для выполнения совершенно разных вещей, и даже можно сделать для выполнения чего-то, что имеет ничего не делать с приращением. Таким образом, ответ на ваш вопрос заключается в том, что нет - по крайней мере в одном языке операторы postfix и prefix ++ для классов могут делать все, что пожелает программист.

Но если кто-то может это сделать, это не значит, что он должен это делать. Поскольку операторы до и после приращения имеют очень хорошо известную семантику, (приличные) программисты на C ++ стараются не нарушать этого, чтобы код, использующий их, был бы наиболее удивлен.

Хорошим примером перегрузки операторов в C ++ являются итераторы STL. Итераторы для контейнеров, таких как связанные списки, определяют класс, который перегружает операторы preincrement и postincrement таким образом, что он имитирует указатель (итераторы в C ++ на самом деле являются обобщением указателей).

...