Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ++i или i++? / 25 сообщений из 39, страница 1 из 2
27.06.2006, 16:18
    #33817308
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
Возник вопрос:
Что предпочтительнее использовать для циклов?
Вроде бы как ++i (исходя из идеи ООП), Но для обычных переменных типа integer возникают сомнения- есть подозрение, что большинство компиляторов работают еще так, как было в С-- сперва ++i, потом все операции, потом i++
...
Рейтинг: 0 / 0
27.06.2006, 16:23
    #33817329
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denВозник вопрос:
++i (исходя из идеи ООП)
как это связанно?

насколько я помнею ++i и i++ отличается тем когда произойдет инкримент i.
i=1;
2+(i++) = 3
2+i = 4

2+(++i) = 4
2+i = 4

вроде так писали в учебниках или я ошибаюсь?
...
Рейтинг: 0 / 0
27.06.2006, 16:25
    #33817339
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
for (i=0;i<10;++i)
{
что то мне подсказывает что i=0 в этом цыкле небудет
}
_____________________________________
А я хочу Брежнева, чтобы все было по прежнему... "Стволы"
...
Рейтинг: 0 / 0
27.06.2006, 16:26
    #33817343
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
Писали то писали, но проверьте пример
i=1;
i=(++i)+(++i);
cout<<i;

Получим 6, что мне удалось объяснить пережитком из С(тестовые примеры подтверждали, что для ++i не имеет значение приоритет скобок)
...
Рейтинг: 0 / 0
27.06.2006, 16:27
    #33817347
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denВозник вопрос:
Что предпочтительнее использовать для циклов?
Вроде бы как ++i (исходя из идеи ООП), Но для обычных переменных типа integer возникают сомнения- есть подозрение, что большинство компиляторов работают еще так, как было в С-- сперва ++i, потом все операции, потом i++
Компиляторы компилируют то, что ты на[ш]кодил...
Почитай в книжках про работу циклов, а ООП пока шо не трогай.
...
Рейтинг: 0 / 0
27.06.2006, 16:29
    #33817355
barrabas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
нету на работе с++ поэтому не притендую ниначо, просто востановил в пямяти что знал.
...
Рейтинг: 0 / 0
27.06.2006, 16:31
    #33817368
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
У меня тоже:-)
Но этим примером удалось поставить препода в тупик, хотя курс по ООП на С++ он нам прочитал хороший(во всяком случае, мне так показалось)
...
Рейтинг: 0 / 0
27.06.2006, 16:34
    #33817382
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denПисали то писали, но проверьте пример
i=1;
i=(++i)+(++i);
cout<<i;

Получим 6, что мне удалось объяснить пережитком из С(тестовые примеры подтверждали, что для ++i не имеет значение приоритет скобок)
А чем цифра 6 не нравится?
Сначала работает первый ++i (i=2), потом второй (++i) (i=3), потом + (3+3=6)
Читай про пре[пост]ин[де]кременты...
...
Рейтинг: 0 / 0
27.06.2006, 16:34
    #33817383
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denВозник вопрос:
Что предпочтительнее использовать для циклов?
Вроде бы как ++i (исходя из идеи ООП), Но для обычных переменных типа integer возникают сомнения- есть подозрение, что большинство компиляторов работают еще так, как было в С-- сперва ++i, потом все операции, потом i++

Код: plaintext
1.
2.
for (i= 0  ; i<N ; i++) {
...
}
...
Рейтинг: 0 / 0
27.06.2006, 16:35
    #33817385
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denУ меня тоже:-)
Но этим примером удалось поставить препода в тупик, хотя курс по ООП на С++ он нам прочитал хороший(во всяком случае, мне так показалось)
Показалось.
Препода на мыло.
...
Рейтинг: 0 / 0
27.06.2006, 16:37
    #33817388
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denУ меня тоже:-)
Но этим примером удалось поставить препода в тупик, хотя курс по ООП на С++ он нам прочитал хороший(во всяком случае, мне так показалось)
...
Рейтинг: 0 / 0
27.06.2006, 16:38
    #33817390
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
А идея скобок для изменения приоритета операции забыта?
Если создать простейший класс(из одной переменной) и переопределить операции инкремента, то работает именно с учетом скобок)
...
Рейтинг: 0 / 0
27.06.2006, 16:39
    #33817395
KGP
KGP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
barrabas
насколько я помнею ++i и i++ отличается тем когда произойдет инкримент i.

различий несколько ...
1. входные параметры
2. выходной параметр (как по типу, так и по значению)
...
Рейтинг: 0 / 0
27.06.2006, 16:39
    #33817397
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy deni=1;
i=(++i)+(++i);
cout<<i;
помойму результат считается неопределенным..
...
Рейтинг: 0 / 0
27.06.2006, 16:40
    #33817400
Dmitrii K.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denА идея скобок для изменения приоритета операции забыта?
Если создать простейший класс(из одной переменной) и переопределить операции инкремента, то работает именно с учетом скобок)
А циклы тут при чём?
...
Рейтинг: 0 / 0
27.06.2006, 16:40
    #33817401
Goldminer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denВозник вопрос:
Что предпочтительнее использовать для циклов?
Вроде бы как ++i (исходя из идеи ООП)Нормальный оптимизирующий компилятор, по идее, должен понять, что результат не используется и сгенерировать одинаковый код для обоих случаев. Если оптимизация по каким-либо причинам не работает, то префикс может оказаться эффективнее, т.к. постфикс (строго говоря) должен порождать временное значение.
zloy denсперва ++i, потом все операции, потом i++А вот это уже совсем интересно: что за сначала и потом? У вас что, НЕСКОЛЬКО унарных операций в одном выражении (типа ++i--++)? ;-))))
...
Рейтинг: 0 / 0
27.06.2006, 16:43
    #33817411
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy denА идея скобок для изменения приоритета операции забыта?
Если создать простейший класс(из одной переменной) и переопределить операции инкремента, то работает именно с учетом скобок)

Дезасемблируй и посмотри. Так как переменная одна, то и хранится она в одном месте. Перед тем как произвести сложение, ты ее инкрементируешь еще раз, а потом складываешь, саму с собой. Что-то типа:

[SRC asm]
inc ax ;2
inc ax ;3
add ax, ax ;6
[/SRC]
...
Рейтинг: 0 / 0
27.06.2006, 16:44
    #33817416
redskin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
i++ от ++i отличается не тем "когда произойдет инкремент", а возвращаемым значением. ++i возвращает уже увеличенное значение, а i++ прежнее. Поэтому если в качестве счетчика цикла используется int, то можно не заморачиваться, разницы никакой.

Совет "исходя из идее ООП" использовать ++i основан на том, что эта операция в случае сложных типов и перегруженных операторов возможно будет стоить дешевле чем постфиксный инкремент из-за экономии на создании копии объекта.

Код: plaintext
i=(++i)+(++i);

А тут имеем неопределенное поведение, так писать не надо.
...
Рейтинг: 0 / 0
27.06.2006, 16:45
    #33817424
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
GoldminerА вот это уже совсем интересно: что за сначала и потом? У вас что, НЕСКОЛЬКО унарных операций в одном выражении (типа ++i--++)? ;-))))

Нет, просто префиксное сложение имеет наивысший приоритет, постфиксное-наинизший
...
Рейтинг: 0 / 0
27.06.2006, 16:46
    #33817426
Akh
Akh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
GoldminerУ вас что, НЕСКОЛЬКО унарных операций в одном выражении (типа ++i--++)? ;-))))

Естесственно, это чисто теоретический вопрос.
...
Рейтинг: 0 / 0
27.06.2006, 16:47
    #33817430
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
GoldminerА вот это уже совсем интересно: что за сначала и потом? У вас что, НЕСКОЛЬКО унарных операций в одном выражении (типа ++i--++)? ;-))))у постфиксных операций приоритет больше, чем у префиксных. Не забываем классику while(*src)*dst++=*src++;
...
Рейтинг: 0 / 0
27.06.2006, 16:48
    #33817431
zloy den
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
redskini++ от ++i отличается не тем "когда произойдет инкремент", а возвращаемым значением. ++i возвращает уже увеличенное значение, а i++ прежнее. Поэтому если в качестве счетчика цикла используется int, то можно не заморачиваться, разницы никакой.

Совет "исходя из идее ООП" использовать ++i основан на том, что эта операция в случае сложных типов и перегруженных операторов возможно будет стоить дешевле чем постфиксный инкремент из-за экономии на создании копии объекта.

Код: plaintext
i=(++i)+(++i);

А тут имеем неопределенное поведение, так писать не надо.

Про это я и говорил, у меня возникло ощущение что для int разницы никакой, а для классов она есть(за счет создания временного объекта для постфикса)
...
Рейтинг: 0 / 0
27.06.2006, 16:56
    #33817456
Goldminer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
zloy den GoldminerА вот это уже совсем интересно: что за сначала и потом? У вас что, НЕСКОЛЬКО унарных операций в одном выражении (типа ++i--++)? ;-))))

Нет, просто префиксное сложение имеет наивысший приоритет, постфиксное-наинизшийВот я и справшиваю, перед ЧЕМ оно имеет приоритет?
...
Рейтинг: 0 / 0
27.06.2006, 16:59
    #33817463
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
http://www.sql.ru/forum/actualthread.aspx?tid=291318
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
28.06.2006, 13:31
    #33819121
nikname
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++i или i++?
Для цикла - только преинкремент.

Преинкремент - продвинуть (+1) и вернуть.
Постинкремент - создать копию, продвинуть (+1), веруть копию, т.е. лишняя явно операция.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ++i или i++? / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]