Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Префиксная и постфиксная формы операторов приращения, i++ vs ++i 
V
    Опции темы
EgoBrain
Дата 27.9.2009, 04:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 23.3.2008
Где: Комната

Репутация: нет
Всего: 2



Почему в примерах с заданием элементов массива и их выводом через цикл for используется такой подход:
переменная счетчика задается заранее и инкриминируется "++i" а не "i++"?
Код

int i;
for(i = 0; i < n; ++i)
{

}

вместо
Код

for(int i = 0; i < n; i++)


PM MAIL ICQ Skype   Вверх
xvr
Дата 27.9.2009, 08:39 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(EgoBrain @ 27.9.2009,  04:06)
Почему в примерах с заданием элементов массива и их выводом через цикл for используется такой подход:
переменная счетчика задается заранее и инкриминируется "++i" а не "i++"?
Код

int i;
for(i = 0; i < n; ++i)
{

}


Так (с отдельным описанием переменной) задается только в С части, т.к. С не поддерживает синтакс for(int i ...)

А по поводу ++i/i++ есть одно соображение (опять же, это только для С++) -
Пока у вас i POD переменная, то обе записи инкремента абсолютно эквивалентны (конечно, если не используется собственно результат инкремента). Если же у вас не POD тип с переопределенным инкрементом, то в общем случае постинкремент будет более накладной операцией, т.к. инкрементируемому классу придется сделать свою копию ПЕРЕД инкрементом, что бы было что вернуть в качестве результата (т.к. семантика постинкремента требует вернуть именно оригинал переменной ДО применения операции инкремент).
В случае же преинкремента обычно возвращают сам объект (по ссылке).

Поэтому в С++ рекомендуется везде (где есть выбор) использовать преинкремент, что бы не разбираться в типах того, что инкрементуруется да и просто в качестве тренировки  smile 

PM MAIL   Вверх
bsa
Дата 27.9.2009, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



EgoBrain, ты видимо плохо знаешь, как работает оператор for. А он работает так for(EXP1; EXP2; EXP3) EXP4:
Код
НАЧАЛО ОБЛАСТИ ВИДИМОСТИ
   EXP1;
   ПОКА EXP2 ИСТИННО ВЫПОЛНЯТЬ
   НАЧАЛО
       EXP4;
       EXP3;
   КОНЕЦ; 
КОНЕЦ ОБЛАСТИ ВИДИМОСТИ
Таким образом, цикл for можно переписать с помощью while:
Код
{
   EXP1;
   while(EXP2) {
       EXP4;
       EXP3;
   }
}
Именно поэтому, с точки зрения логики работы цикла, не важно что использовать ++i или i++. Но вот с точки зрения быстродействия (в общем случае), лучше использовать ++i везде, где не нужна функциональность постфиксной формы.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.