1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
| мисс_граффити |
21.07.2007 18:08
Сообщение
#1
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
здравствуйте...
есть небольшой кусочек кода: int i=5; java считает, что получается 13 (я с ней согласна... 0) ++i равно 6 1) ++i равно 7 2) 6+7=13) а вот с++ (пользуюсь с++ builder 5) уверен, что 14. вопрос: это фишка языка или компилятора (то есть что получится при использовании другого с++-ного компилятора)? и откуда, все же, берется 14? -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
![]() ![]() |
| Neznaika |
11.08.2007 20:13
Сообщение
#2
|
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Репутация: 0 |
i = ++i + ++i;
Оператор ++ используется только с ПЕРЕМЕННОЙ и производит ДВА результата: 1) сначала на 1 увеличивается i; 2) результат (++i) равен первоначальному значению i плюс 1. Следовательно исходный оператор можно разделить на 3: temp1 = ++i; temp2 = ++i; i = temp1 + temp2; В каком порядке вычисляются temp1 и temp2 не имеет значения, поэтому, если сначала i = 5, то после (i = ++i + ++i) i должно быть равно 13. Правая часть вычисляется независимо от левой. I увеличивается на 1 всего два раза и далее в последней операции сложения не участвует. Откуда BDS2006 и VS2005 получают 14??? Справа два (++i) зависят друг от друга, но левое i... Это же всего лишь приёмник. Разве не так? Цитата inc dword ptr [ebp-$04] inc dword ptr [ebp-$04] mov eax,[ebp-$04] ; eax = temp2 temp1 потерян. add [ebp-$04],eax ; i = temp2 + temp2 Цитата eax,dword ptr [i] add eax,1 mov dword ptr [i],eax ; i = temp1 mov ecx,dword ptr [i] add ecx,1 mov dword ptr [i],ecx ; i = temp2 mov edx,dword ptr [i] add edx,dword ptr [i] mov dword ptr [i],edx ; i = temp2 + temp2 ??? Теперь понятно, почему эти уроды у меня не живут. |
мисс_граффити ++i 21.07.2007 18:08
volvo В С++ такое выражение по Стандарту вызывает UB (Un... 21.07.2007 18:33
мисс_граффити а в чем именно заключается некорректность?
в том, ... 21.07.2007 18:57
volvo Некорректность заключается в изменении одной перем... 21.07.2007 19:01
мисс_граффити нашла статейку по этому поводу, разобралась оконча... 22.07.2007 23:06
hardcase нашла статейку по этому поводу, разобралась оконч... 6.08.2007 18:30
klem4 Юль, а ссылочкой на статью не поделишься ? :10: 11.08.2007 19:58
мисс_граффити
Юль, а ссылочкой на статью не поделишься ? :10:
... 12.08.2007 9:59
volvo Повторяю для особо внимательных: после Undefined B... 11.08.2007 21:04![]() ![]() |
|
Текстовая версия | 13.12.2025 9:00 |