Возможно, стоит сравнить с аналогичными конструкциями на других языках.
В python, чтобы перебирать последовательность, мы используем генератор. Существует только одна операция, которую вы можете сделать с генератором: вызовите next
, который получает элемент и продвигает генератор. Итерация, когда выполняется вручную, выполняется путем повторного вызова next
, чтобы получить условия последовательности до тех пор, пока она не добавит StopIteration
, чтобы сигнализировать о завершении последовательности.
В java, чтобы перебирать последовательность, мы имеем Iterator
. Существует по существу только одна операция, которую вы можете сделать с итератором: вызовите next
, который получает элемент и продвигает итератор. Итерация, когда выполняется вручную, выполняется путем повторного вызова next
, чтобы получить условия последовательности до тех пор, пока hasNext
не вернет false
, чтобы сигнализировать о завершении последовательности.
В C/C++ ... мы часто хотим получить элемент и продвигаться по последовательности. Уже давно установлено (AFAIK до C++ даже существует), что эта операция *p++
.
Единственная причина, по которой мы даже рассматриваем идею взлома этого на два шага - один шаг, заключающийся в том, чтобы заставить текущий элемент, а другой шаг - перейти к следующему термину, - это артефакт функции реализации .
В ситуации, когда один действительно, думая об этих двух шагах как о самостоятельных, независимых вещах, тогда было бы лучше оставить их в виде отдельных выражений.
Но относительно хорошо установлено, что это не как люди думают - люди думают с точки зрения «получения элемента и продвижения итератора». Итерация, когда выполняется вручную, выполняется путем повторного вызова *iter++
, чтобы получить условия последовательности, пока iter == end_iter
не вернет истину, чтобы обозначить конец последовательности.
Если вы думаете об этом, разделение одного концептуального шага на два синтаксически отдельных элемента (*iter
и ++iter
) является более подверженным ошибкам, чем сохранение его как одного шага.
Кто-то курил что-то, когда это было написано. Ясно, что 2-й недвусмыслен. – leppie
Я думаю, что больше кода. Написание большего количества кода приводит к большей склонности к ошибкам. –
Я не вижу этот код в книге. Вы уверены в странице? Какая глава/параграф? – Brahim