Форум программистов, компьютерный форум CyberForum.ru

i = ++i + ++i; - C++

Восстановить пароль Регистрация
 
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
29.03.2011, 16:43     i = ++i + ++i; #1
int i = 5;
i = ++i + ++i;
равен 14 ПОЧЕМУ разжуйте!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.03.2011, 16:44     i = ++i + ++i; #2
.Malek., Потому что это UB. Undefined behaviour по стандарту. Нету прохождения точек следования, переменная изменяется 2 или более раз в одной инструкции.
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
29.03.2011, 16:47  [ТС]     i = ++i + ++i; #3
мда а по легче не так заумно по идее ++i это i+1 и т.е. 6+6=12
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.03.2011, 16:47     i = ++i + ++i; #4
.Malek., Это UB еще раз скажу. Почитайте, может поймете.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
29.03.2011, 16:50     i = ++i + ++i; #5
.Malek., посчитайте, сколько раз перед присваиванием переменная увеличивается на единицу
TAVulator
3943 / 1101 / 69
Регистрация: 27.07.2009
Сообщений: 3,443
29.03.2011, 16:53     i = ++i + ++i; #6
Цитата Сообщение от .Malek. Посмотреть сообщение
int i = 5;
i = ++i + ++i;
равен 14 ПОЧЕМУ разжуйте!!
странно, у меня это выражение возвращает 13. И это довольно логично: Прибавляем 5+1 = 6, потом к 6 прибавляем 6+1=7. Итого 6+7=13.
Откуда у тебя 14 взялось...
Правда я это проверял не в С++, а в C#. Но, думаю, это не на столько важно.
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
29.03.2011, 16:54  [ТС]     i = ++i + ++i; #7
http://lurkmore.ru/%2B%2Bi_%2B_%2B%2Bi прочитай тут и поймешь почему 13
TAVulator
3943 / 1101 / 69
Регистрация: 27.07.2009
Сообщений: 3,443
29.03.2011, 16:56     i = ++i + ++i; #8
глянул на ссылку от ForEveR и, видимо, это важно, какой компилятор )))

Добавлено через 1 минуту
Цитата Сообщение от .Malek. Посмотреть сообщение
http://lurkmore.ru/%2B%2Bi_%2B_%2B%2Bi прочитай тут и поймешь почему 13
да я то как раз понимаю откуда у меня 13 взялось. Я это тебе и описал. Откуда 14 берется не понимаю.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
29.03.2011, 17:02     i = ++i + ++i; #9
TAVulator, в си сначала выполняются все операции одного приоритета, только потом происходит переход к следующему, так, сначала два раза выполняется префиксный инкремент, откуда i - 7, после чего в i записываем сумму двух i
oxotnik
 Аватар для oxotnik
1584 / 1061 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
29.03.2011, 17:02     i = ++i + ++i; #10
Цитата Сообщение от TAVulator Посмотреть сообщение
да я то как раз понимаю откуда у меня 13 взялось. Я это тебе и описал. Откуда 14 берется не понимаю.
tmp=i; i = tmp+1 + tmp+1; i++; i++;
и как
tmp=i; i++; i++; i = tmp+1 + tmp+1;
2-й вариант с лурка
ЗЫ: к стати, на лурке много понятней написано, нежели в учебниках
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.03.2011, 17:03     i = ++i + ++i; #11
iama, да нет. не всегда. Именно поэтому UB) Может и 13 получится.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
29.03.2011, 17:05     i = ++i + ++i; #12
ForEveR, насколько я могу понимать, это напрямую зависит от конкретной реализации компилятора
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.03.2011, 17:07     i = ++i + ++i; #13
iama, Ну да.
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
29.03.2011, 17:09     i = ++i + ++i; #14
Затестил, MS VC++ 2010 и GCC возвращают 14
Yandex
Объявления
29.03.2011, 17:09     i = ++i + ++i;
Ответ Создать тему
Опции темы

Текущее время: 12:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru