|
Флудильня Разговоры на любые темы. Мы устаем постоянно работать. Иногда надо где-то немного отдохнуть. Пожалуйста, не надо здесь устраивать бардак. |
|
Опции темы | Поиск в этой теме | Опции просмотра |
13.01.2011, 08:59 | #1 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
стандарты С++, компиляторы, и i++ i ++
Хороший тест, только вот ответ на вопрос
|
|
13.01.2011, 09:42 | #2 | |
Умный
Регистрация: 07.03.2010
Адрес: Северный Урал (60°сш, 60°вд)
Сообщений: 330
Сказал(а) спасибо: 82
Поблагодарили 399 раз(а) в 120 сообщениях
Записей в дневнике: 30
|
Вот этого и добиваемся! Если засунул строчку в компилятор, то уже хоть чего то может.... |
|
13.01.2011, 11:59 | #3 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Один засунет в один компилятор, другой - в другой, а ответы получатся разные.
|
13.01.2011, 12:23 | #4 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
если другой компилятор выдаст другой ответ, то это плохой компилятор
|
13.01.2011, 13:07 | #5 |
Администратор
|
Это форум по мангосу, а не программированию на си++.
Тест должен содержать вопросы относительно тематики форума. |
13.01.2011, 13:25 | #6 | |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
А как определить какой хороший?
Про такое понятие, как Undefined Behaviour, не слышали?
Последний раз редактировалось zergtmn; 13.01.2011 в 13:34. |
|
13.01.2011, 14:23 | #7 |
Администратор
|
Не надо такие вопросы включать в тест, это уже идет тематика программирования.
|
13.01.2011, 14:32 | #8 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
|
14.01.2011, 09:38 | #9 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
у меня нет претензий к вопросом за исключением одного, насчет вычислить выражение i = 5; i = ++i + ++i.
Там просто необходимо добавить предложение что это "выражение на языке с++" |
14.01.2011, 10:12 | #10 | |||
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
Добавлено через 5 минут Цитата:
|
|||
14.01.2011, 13:57 | #11 | ||
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Цитата:
|
||
14.01.2011, 19:21 | #12 | ||
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
|
||
14.01.2011, 19:45 | #13 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
ну и как вариант:
Последний раз редактировалось YuruY; 14.01.2011 в 20:03. |
|
14.01.2011, 21:05 | #14 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
|
|
14.01.2011, 22:31 | #15 | ||||
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
и ... ? может быть ты считаешь что турбос с дискетки 90-ых является тем самым компилятором на который стоит ровняться ? Или ты считаешь что он "честно в соответствии с объявленной последовательной логикой выполнения выдает" правильный результат ? Лезем в ТОТ САМЫЙ стандарт, что для языка с, что для с++ там есть такая фраза: Цитата:
Для случаев как с тс я уже написал :
Последний раз редактировалось Йоха; 14.01.2011 в 23:15. |
||||
15.01.2011, 00:38 | #16 | |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
|
|
15.01.2011, 12:14 | #17 | |||
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
Цитата:
добавлено: Цитата:
в твоей же цитате написано "The result is the new value of the operand after incrementation". ++i не переменную возвращает, а значение. "tC, 90-затертого года" выдал правильный результат. Последний раз редактировалось RomanRom2; 15.01.2011 в 17:13. |
|||
15.01.2011, 18:37 | #18 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Народ, вы неверно понимаете смысл оператора ++. Он не возвращает значение! Он увеличивает значение переменной и возвращает ее. И в зависимости от формы (префиксная или постфиксная) значение переменной увеличивается до вычисления выражения или после. В нашем случае сперва значение переменной i увеличивается на единицу два раза, а потом происходит сложение переменной с самой собой. Базовый синтаксис префиксного оператора ++ в ввиде функции-члена класса: Код:
T &T::operator ++(T&) P.S. турбо с в топку ! P.P.S учите матчасть ! Последний раз редактировалось Йоха; 15.01.2011 в 19:08. |
|
15.01.2011, 20:12 | #19 | ||
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Цитата:
Добавлено через 3 минуты с моей точки зрения умение найти ответ на этом же форуме, а не в гугле, уже вполне достойная заявка. |
||
15.01.2011, 20:41 | #20 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Последний раз редактировалось zergtmn; 15.01.2011 в 20:46. |
16.01.2011, 03:02 | #21 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
ты же сам написал: The result is the new value of the operand after incrementation. тут написано новое ЗНАЧЕНИЕ. оператор ++ для своего класса ты можешь как угодно перегрузить, но ты ж не можешь например сделать ++i = 1, если это int. разберись с документацией. но истина оказалась совсем не там мы тут посовещались с нашими гуру, говорят что так вообще некорректно делать. потому что имеются побочные эффекты, порядок выполнения которых не гарантирован. будет сделано следующее: 1) запомнено число i 2) увеличено i 3) запомнено число i 4) увеличено i посчитана сумма 1) и 3) 6) i присвоен результат 5) гарантируется, что 2) выполняется после 1), 4) выполняется после 3), 5) выполняется после 1) и 3), 6) выполняется после 5), остальное не гарантируется. вроде бы даже не гарантируется, что будет "увеличено i", а не "i = результат 1) + 1". понятно, в чем проблема? нельзя делать предположения о порядке вычисления выражения (кроме || и &&, для который порядок определен). нельзя делать предположения о том, что будет выполнено раньше - присваивание или увеличение. об этом написал чуть выше zergtmn. вот тебе еще ссылка на msdn, как раз этот случай: http://msdn.microsoft.com/en-us/libr...=vs.80%29.aspx иными словами и коротко говоря - такие действия вообще не определены каким либо стандартом. zergtmn выделил это для тебя красным. вот в этом истина. в таком случае результат полностью будет зависить от компилятора и ошибкой это не будет. это будет просто отдельной интерпритацией. но компилятор то это всё хавает... как уж так? да очень просто, это намеренно сделано. компилятору это разрешено делать, чтобы можно было делать всякие умные вкусные оптимизации. вообще, по рукам молотком тем, кто пишет проги, которые по-разному работают на разных компиляторах. вот зачем делать i = ++i +1? делай i += 2 и не умничай. итак, какой бы не был результат - он всегда будет (вот парадокс) правильный "точка зрения" будет зависить от используемого компилятора. кстати, покажи плиз компилятор, в котором будет равно тому, в чем ты так уверен? |
|
16.01.2011, 10:15 | #22 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Согласен, почитал стандарт, там действительно результат подобного выражения не определен. В общем случае выражение не может содержать операторов которые изменяют операнд более одного раза. Так что результат подобных выражений целиком на совести разработчиков компилятора.
|
|
16.01.2011, 17:40 | #23 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
а чо, собсно. тема можно сказать закрыта ))
|
16.01.2011, 18:17 | #24 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Бл-лин!!!!!!!!!! Как невовремя!!! Только я попкорна набрал, в первый ряд протолкался...
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
16.01.2011, 18:20 | #25 | |
Почетный флудер
Старожил
Регистрация: 08.03.2010
Адрес: Мурманск, Россия
Сообщений: 788
Сказал(а) спасибо: 55
Поблагодарили 333 раз(а) в 151 сообщениях
Записей в дневнике: 1
|
Кстати. Тему, точнее вопрос, можно вернуть взад переформулировав:
|
|
16.01.2011, 19:51 | #26 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Сделать можно только четыре варианта, и лишь один из них можно сделать верным.
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
16.01.2011, 22:33 | #28 | |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Да и еще
|
|
17.01.2011, 08:42 | #29 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
кстати, вот хороший разбор полетов на эту тему:
http://alenacpp.blogspot.com/2005/11...ce-points.html |
17.01.2011, 21:11 | #30 |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
О-О-О!!!!! Вот оно! Ты знал-ты знал!!!
Если человек при любом затруднении, вопросе, проблеме, сложности просто лезет в гугл и находит там ответ - это НАШ человек. А какой компилятор кому что выдает - это проблемы компилятора. Я вообще попробовал это калькулятором посчитать...
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
17.01.2011, 22:00 | #31 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
tempura, ты меня не понял.... я не против чтобы народ пользовался гуглем. Я про то чтобы народ не бездумно копировал найденный ответ из первойже строчки.. )
|
17.01.2011, 22:06 | #32 |
Умный
Старожил
Регистрация: 06.03.2010
Сообщений: 886
Сказал(а) спасибо: 698
Поблагодарили 433 раз(а) в 181 сообщениях
Записей в дневнике: 4
|
Ну темпура об этом и говорит вообще-то. Правильный ответ уже тот - что кто-то полез в гугле. И нашёл его там. И пофиг на компиляторы - пусть будет ответ из гугла - главное, что человек поиском при затруднении умеет пользоваться - об этом шла речь
|
17.01.2011, 22:25 | #33 |
Ученый
Регистрация: 02.04.2010
Сообщений: 237
Сказал(а) спасибо: 41
Поблагодарили 99 раз(а) в 44 сообщениях
|
Я первым делом, подумал, мб нигма поймет синтаксис и решит
http://nigma.ru/?s=i+%3D+5;+i+%3D+%2...all&srt=0&sf=1 |
18.01.2011, 02:03 | #34 | |
Forum bot
Регистрация: 01.02.2010
Адрес: пусто
Сообщений: 841
Сказал(а) спасибо: 286
Поблагодарили 418 раз(а) в 190 сообщениях
Записей в дневнике: 60
|
Цитата:
Не накаляй обстановку...
__________________
Совершенно безопасен для людей, обладающих хотя бы некоторыми минимальными зачатками интеллекта, и способными строить причинно-следственные цепочки. |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Стандарты написания кода в патчах | virusav | Прочая документация | 15 | 23.12.2010 09:40 |