Как всегда, когда люди начинают пытаться переформулировать справочный материал, они почти всегда получают что-то неправильно или предоставляют неполное описание.
Apple предоставляет полное описание системы управления памятью Cocoa в Руководство по программированию управления памятью для Cocoa , в конце которого имеется краткое, но точное резюме правил управления памятью .
++i
увеличит значение i
, и затем возвратит увеличенное значение.
i = 1;
j = ++i;
(i is 2, j is 2)
i++
увеличит значение i
, но возвратит исходное значение, которое i
содержало прежде чем быть увеличенным.
i = 1;
j = i++;
(i is 2, j is 1)
Для for
цикл, любой работы. ++i
кажется более распространенным, возможно, потому что, именно это используется в [1 114] K& R.
В любом случае, следуйте, инструкция "предпочитают ++i
[более чем 1 110]", и Вы не пойдете не так, как надо.
существует несколько комментариев относительно эффективности [1 111] и i++
. В любом non-student-project компиляторе не будет никакого различия в производительности. Можно проверить это путем рассмотрения сгенерированного кода, который будет идентичен.
вопрос об эффективности интересен..., вот моя попытка ответа: там различие в производительности между мной ++ и ++ я в C?
Как [1 116] На нотах Freund, это отличается для объекта C++, так как operator++()
функция, и компилятор не может знать для оптимизации далеко создания временного объекта для содержания промежуточного значения.
Причина ++i
может быть немного быстрее, чем i++
, то, что i++
может потребовать локальной копии значения меня, прежде чем это будет увеличено, в то время как ++i
никогда не делает. В некоторых случаях некоторые компиляторы оптимизируют его далеко, если это возможно..., но это не всегда возможно, и не все компиляторы делают это.
я пытаюсь не положиться слишком много на оптимизацию компиляторов, таким образом, я последовал бы совету Ryan Fox: когда я могу использовать обоих, я использую ++i
.
++i
инкременты значение, затем возвращает его.
i++
возвраты значение, и затем увеличивает его.
Это - тонкое различие.
Для для цикла, используйте ++i
, поскольку это немного быстрее. i++
создаст дополнительную копию, которая просто выброшена.
Не волнуйтесь об "эффективности" (скорость, действительно), которых быстрее. У нас есть компиляторы в эти дни, которые заботятся об этих вещах. Используйте, какой бы ни каждый имеет смысл использовать, на основе которого больше ясно показывает Ваше намерение.