| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Операторами ++ и + в одной инструкции |
| Автор: Etar 21.2.2008, 22:04 | ||
| Здравствуйте. Вот есть такой код:
Какая же последовательность действий при вычислении выражения в первом и во втором случаях? Попытался разобраться: x + ++ x + x сперва должен выполнится оператор ++, так как у него самый высокий приоритет в выражении, затем остальные операторы слева направо: x + 2 + x // преинкремент увеличивает x на 1 и возвращает увеличенный результат 2 + 2 + x 2 + 2 + 2 = 6 - что и выходит в C++ но в C# выходит 5 выходит, что логика здесь другая, например такая: сперва извлекается значение из первой переменной x, затем выполняется оператор ++, затем извлекается значение из последней переменной x: 1 + ++x + x 1 + 2 + x 1 + 2 + 2 = 5 но тогда как-то странно получается, выходит что существует некая 'операция извлечения значений из переменных', которая имеет одинаковый с постинкрементом приоритет (т.е. самый верхний) x + x ++ + x Здесь же вообще непонятно. Если по С++ рассуждать, то здесь будет так: сперва выполнить ++, так как у него самый высокий приоритет среди операторов затем выполнить остальное слева направо: x + 1 + x // постинкремент сперва возвращает текущее значение переменной, затем ее увеличивает 2 + 1 + x 2 + 1 + 2 = 5 но компилятор C++ выдает мне 4, и C# тоже самое что за ерунда Объясните пожалуйста! Спасибо. |
| Автор: PPS05 21.2.2008, 22:14 |
| Где-то на Винграде уже была такая тема... |
| Автор: Real 22.2.2008, 00:13 | ||
Глючит С++ |
| Автор: Crimp 22.2.2008, 01:08 |
| читать тут http://www.progz.ru/forum/lofiversion/index.php/t32777.html должно сразу навести на правельные мысли, или гугли ешё |
| Автор: vponomarov 22.2.2008, 11:15 |
| сорри, был не прав:( |
| Автор: bogys 22.2.2008, 13:03 |
| http://forum.vingrad.ru/forum/topic-175107/hl/sequence+points/index.html#st_0_view_0 |
| Автор: MFSham 22.2.2008, 16:53 |
| Тема точно такая была. Я тоже раньше задавался точно таким же вопросом upd. вот http://forum.vingrad.ru/topic-142244.html |
| Автор: Xenon 23.2.2008, 02:05 |
| А по-моему это просто UB |