C: В чем разница между ++ i и i ++?

Как всегда, когда люди начинают пытаться переформулировать справочный материал, они почти всегда получают что-то неправильно или предоставляют неполное описание.

Apple предоставляет полное описание системы управления памятью Cocoa в Руководство по программированию управления памятью для Cocoa , в конце которого имеется краткое, но точное резюме правил управления памятью .

777
задан Mark Harrison 16 July 2019 в 22:29
поделиться

4 ответа

  • ++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++() функция, и компилятор не может знать для оптимизации далеко создания временного объекта для содержания промежуточного значения.

962
ответ дан Community 16 July 2019 в 22:29
поделиться

Причина ++i может быть немного быстрее, чем i++, то, что i++ может потребовать локальной копии значения меня, прежде чем это будет увеличено, в то время как ++i никогда не делает. В некоторых случаях некоторые компиляторы оптимизируют его далеко, если это возможно..., но это не всегда возможно, и не все компиляторы делают это.

я пытаюсь не положиться слишком много на оптимизацию компиляторов, таким образом, я последовал бы совету Ryan Fox: когда я могу использовать обоих, я использую ++i.

19
ответ дан Yves M. 16 July 2019 в 22:29
поделиться

++i инкременты значение, затем возвращает его.

i++ возвраты значение, и затем увеличивает его.

Это - тонкое различие.

Для для цикла, используйте ++i, поскольку это немного быстрее. i++ создаст дополнительную копию, которая просто выброшена.

31
ответ дан Yves M. 16 July 2019 в 22:29
поделиться

Не волнуйтесь об "эффективности" (скорость, действительно), которых быстрее. У нас есть компиляторы в эти дни, которые заботятся об этих вещах. Используйте, какой бы ни каждый имеет смысл использовать, на основе которого больше ясно показывает Ваше намерение.

38
ответ дан Andy Lester 16 July 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: