Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > (++i)++


Автор: Алина 23.6.2005, 04:56
Если кто-нибудь может, объясните пожалуйста, как будет работать следующий фрагмент кода:
Код

i=5;
do
{cout<<(++i)++<<endl;
}
while(i<=7);

Выводит два числа: 6, 8

Как будет работать
Код

i=5;
cout<<i++<<" "<<i;


Чем отличаются
++i и i++?

Чему будет равно значение переменной после выполнения этой команды? А если ее использовать в cout<<i++<<" "<<i;?

Автор: En_t_end 23.6.2005, 05:18
Цитата
Чем отличаются
++i и i++?

++i - унарная операция прибавления еденицы, то есть возвращает i+1.
i++ - то же самое, но возвращает сначала i, затем увеличивает её на 1.
То есть в результате работы этого кода:
Цитата
Код
i=5;
cout<<i++<<" "<<i;

Вот что будет в "консоле: 5 6"

Цитата

i=5;
do
{cout<<(++i)++<<endl;
}
while(i<=7);

Здесь все аналогично, правда присутсвтует приритет скобок, и еси я не ошибаюсь, в первой и последней итерации будет : "консоль: 7"

Автор: Ignat 23.6.2005, 09:58
Цитата(En_t_end @ 23.6.2005, 06:18)


Цитата
i=5;
do
{cout<<(++i)++<<endl;
}
while(i<=7);

Здесь все аналогично, правда присутсвтует приритет скобок, и еси я не ошибаюсь, в первой и последней итерации будет : "консоль: 7"



Нет, ответ был указан выше: 6, 8.

Постфиксный инкремент имеет более высокий приоритет, чем префиксный, поэтому поставлены скобки.

Т.е. этот кусок выполнится в две итерации в консоль пойдет 6, НО i=7 после первой итерации. Аналогично будет выполнена вторая итерация.


En_t_end, скажи, что будет результатом строчек smile
Код

int i=5;
cout<<++i--;


Чур, не подсказывать smile

Автор: Earnest 23.6.2005, 15:15
Цитата(Ignat @ 23.6.2005, 09:58)
Постфиксный инкремент имеет более высокий приоритет, чем префиксный, поэтому поставлены скобки.

Скобки поставлены не только из-за приоритета, а еще и ... тс! ... (велено не подсказывать) smile

Автор: Ignat 23.6.2005, 15:32
Цитата(Earnest @ 23.6.2005, 16:15)

Скобки поставлены не только из-за приоритета, а еще и ... тс!

Я же просил smile

Автор: Royan 23.6.2005, 20:21
За границы вопроса это не выходит, но поясню вот что.

Любой постфиксный инкремент, выполняется посредством префиксного. Это означает, что постфиксный инкремент будет работать ВСЕГДА медленнее.

Автор: En_t_end 23.6.2005, 22:08
Ignat
А че эта на меня так навалились ? Я как оказалась вобще чел отсталый со всеми своим книженциями: "С++ для чайников" - читаю вот теперь Страуструпа, да protected его m_members.

Автор: AISIN 24.6.2005, 19:05
Цитата(Ignat @ 23.6.2005, 09:58)
Код

int i=5;
cout<<++i--;


Да не че не будет!

Автор: Ignat 27.6.2005, 08:20
Цитата(AISIN @ 24.6.2005, 20:05)
Да не че не будет!


AISIN
Во-первых, вопрос задан не Вам.
Во-вторых, ответ можно было написать без грамматических ошибок.
В-третьих, что-то всё-таки будет.
В-четвертых, если уж отвечаете, то пояснили бы почему.


Автор: AISIN 12.7.2005, 09:46
Вот такая фишка i++ или i-- возвращает константу!
А значит эти операторы невозможно применить несколько раз подряд!
Зато префиксная форма (--i или ++i) возвращаетссылку на переменную!
и вот такая запись будет ++--++i корректна!
P.S. За ошибки извиняюсь! Ну, двойка у меня по русскому языку!
Чё мне теперь застрелиться что ли!

Автор: LP 12.7.2005, 12:28
Цитата(En_t_end @ 23.6.2005, 05:18)
Цитата (Алина @ 23.6.2005, 08:56)
Код
i=5;
cout<<i++<<" "<<i;


Вот что будет в "консоле: 5 6"

Неопределенное поведение. Оператор << не является точкой следования.

Автор: pablo 12.7.2005, 12:39
Цитата
В-третьих, что-то всё-таки будет.
В-четвертых, если уж отвечаете, то пояснили бы почему.


ничего кроме ошибки во время компиляции там не будет.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)