Я никогда не видел учебника или какой-либо лекции, в которой был показан классический для цикла с последующим приращением.pre-increment vs post-increment - for-loop speed
for (int i=0; i<array.length; i++) {}
Если вы используете постинкремент, переменный «я» будет храниться в кэше, прежде чем он получит приращение! Но это не имеет смысла, потому что команда заканчивается прямо.
На мой взгляд, это имеет смысл:
for (int i=0; i<array.length; ++i) {}
Если вы не понял до сих пор, я иду немного дальше (СРЮ за мой английский):
В первом контуре :
- Кэш-значение фактического значения i. (Примечание: не двигаться между ними, так что нет причин, чтобы сделать это)
- Increment я
- Смелее
Во втором цикле:
- Increment я непосредственно
- Go вперед.
Таким образом, вторая петля более совершенна без потери качества. Любые другие мнения?
Единственный способ узнать, является ли второй цикл более эффективным, - это измерить его (при условии, что сгенерированный код сборки сгенерирован отдельно). С 'int' я сомневаюсь, что это имеет значение. Возможно, с некоторыми типами итераторов. ** Редактировать ** Я говорю C++ здесь. – juanchopanza
Когда вы говорите, что «переменная * будет кеширована *», вы используете какое-либо понимание или исследование ситуации, или вы просто спекулируете? –
Я видел тэг C++, но потом он исчез, и я вижу только java, поэтому я разместил dup для java. –