Украду в свой уютный микробложек. (да, мне доставляют пыльные и бородатые вины)
Anhen, 11.05.2007 14:03:27: KoloDen Привет, я общительный пацан, люблю поболтать, особенно с классными девченками. Но, чтобы поговорить со мной, ответьте на простую задачку анти-спам бота. Вот она: int i = 5; i = ++i + ++i; Вопрос: Чему равно i?
Stefmania 14
KoloDen Гы. Признайся, ты не девченка, а 40-летний хрен одмин, да?
DarkMist, 14:03:54: хм 8-)
Anhen, 14:06:01: что хм? 13 или 14?
DarkMist, 14:06:32: бля я завис. то что 14 это точно а вот почему я не могу понять
Anhen, 14:07:43: тогда откуда ты знаешь что точно 14?
DarkMist, 14:09:18: бля 8-) я понял
DarkMist, 14:09:26: сцуко, хитро 8-)
Anhen, 14:09:27: ну? Anhen, 14:09:48: ну?!?!
DarkMist, 14:09:48: откуда знаю что 14: perl -e "$i = 5; $i = ++$i + ++$i; print $i"
DarkMist, 14:10:08: почему 14: пришлось открывать вижи и смотреть асмовый код
Anhen, 14:10:12: и?
DarkMist, 14:11:39: когда вычисляется выражение, сначала вычисляются его операнды но оператор ++i - это не i + 1, а i += 1 то есть сначала к i прибавляется 1, потом к i еще раз прибавляется единица а потом к i прибавляется i получается 7+7, то есть 14
Anhen, 14:12:33: черт красиво!
Anhen, 14:13:32: а вот в пхп 13
DarkMist, 14:39:02: пхп сосет 8-)
Anhen, 14:39:21: пхп логичен
DarkMist, 14:40:06: в данном случае - правильный ответ 14, он согласуется с логикой, а вот 13 - нет
Anhen, 14:40:39: имхо 13 логичнее (5+1) + (5+1)+1
DarkMist, 14:48:04: еще раз. ++i это не i + 1 это так же логично как обман зрения. только здесь не обман зрения, а инерция мышления
Anhen, 14:49:24: i += 1 это i = i+1
DarkMist, 14:50:10: да
DarkMist, 14:51:22: исходный statement выглядит так: i = ( i += 1, i ) + ( i += 1, i ) в этом случае все смотриться логично, aren't you?
Anhen, 14:58:45: я остановила работу всего джавского отдела
Anhen, 14:58:52: сидят пытаются получить 14
DarkMist, 15:00:27: на жабе шо ле 8-)?
Anhen, 15:00:59: ага
Anhen, 15:01:07: у них 13
Anhen, 15:01:13: и куча теорий
Anhen, 15:02:28: не знаю, наша контора считает что логика на стороне 13
Anhen, 15:07:09: на флексе 13 подключились дельфисты :))))))
Anhen, 15:07:20: бугага башорг зло
Anhen, 15:08:49: и в сишарпе 13
Anhen, 15:09:13: а у дельфистов нет инкрементов
DarkMist, 15:21:28: на перле и c++ 14. все остальное от лукавого 8-)
Anhen, 15:22:04: мои коллеги просили передать, что ты сволочь и башорг твой блядский тоже цытата
забавно, но вот где продолжение. они начали встречаться ? :D
вообще хуйню порет этот DarkMist: по правилам языка Си должно быть 13, т.к. i = ( =i += 1 ) + ( =i += 1 ). Проверил на Borland C/C++ 3.0 - получилось 13, как и должно быть. Но в Visual Studio 2010 (dotnet 4.0) - в С++ CLR и С++ native получилось 14 (проверил при максимальной оптимизации), а в C# - 13. Странные эти мелкомягкие...
парсер-лох: i = ( {вр.перем.1} =i += 1 ) + ( {вр.перем.2}=i += 1 )
Тоже 13 и сидел, втыкал, откуда 14.
Что ж в головах людей творилось в этом вашем 2012? Если значение переменной изменяется больше одного раза между точками следования, то поведение не определено. Для С++ правильный ответ: UB
Чтобы написать коммент, необходимо залогиниться