int i = 5;
i = ++i + ++i;
++i + ++i
башорг обновился))
объясните, почему в си
Код:
i = 14
а в пхп
Код:
$i = 5;
$i = ++$i + ++$i;
$i = ++$i + ++$i;
i = 13)
по идее 13 и должно быть... чё в си не так? ))
а, туплю, гугл помог, топик клоз и удалите
Сам разобрался, объясни/покажи, что читал другим =)
1) прибавить единицу к i
2) прибавить единицу к i
3) получить левое слагаемое
4) получить правое слагаемое
5) сложить оба
Цитата: Mr.Hacker
В С++ пред-инкремент выполняется, как и положено пред-инкременту, ДО вычисления выражения:
1) прибавить единицу к i
2) прибавить единицу к i
3) получить левое слагаемое
4) получить правое слагаемое
5) сложить оба
1) прибавить единицу к i
2) прибавить единицу к i
3) получить левое слагаемое
4) получить правое слагаемое
5) сложить оба
Ответ не верный!
В C++ если модифицировать одну переменную дважды не пересекая точку следования (в данном случае точка с запятой), то это ведет к undefined behavior.
Поэтому такие конструкции писать НЕЛЬЗЯ, т.к. разные компиляторы будут воспринимать их по-разному.
по идее берётся оператор +, потом вычисляется ++i слева, ++i справа и складываются
Ты понимаешь понятие "undefined behavior"?
Смотри стандарт.
ммм, ну как я понимаю, это использование переменной до её инициализации и т. п... а про В C++ если модифицировать одну переменную дважды не пересекая точку следования не знал..
movl $0x5,0xfffffffc(%ebp)
incl 0xfffffffc(%ebp)
incl 0xfffffffc(%ebp)
mov 0xfffffffc(%ebp),%eax
add %eax,0xfffffffc(%ebp)
где здесь неопределённость??
Цитата: Green
Поэтому такие конструкции писать НЕЛЬЗЯ, т.к. разные компиляторы будут воспринимать их по-разному.
Причем тут вообще ассемблер? Ты на ассемблере этот код пишешь или на C++?
А неопределенность, вот она:
Цитата: Mr.Hacker
по идее 13 и должно быть... чё в си не так? ))
или вот:
Цитата: Mr.Hacker
1) прибавить единицу к i
2) прибавить единицу к i К какому i? К 5 или уже к 6?
3) получить левое слагаемое А какое именно? Которое было на шаге 1 или 2?
4) получить правое слагаемое А какое именно? Которое было на шаге 1 или 2?
5) сложить оба Оба каких? 6 и 7 или 7 и 7 ?
Кстати
Цитата: Mr.Hacker
В С++ пред-инкремент выполняется, как и положено пред-инкременту, ДО вычисления выражения:
тоже неверное утверждение.
1. Порядок вычисления аргументов неопределен.
2. Как префиксные, так и постфиксные операции будут сделаны до вычисления всего выражения.
насчёт асма: 4 компилятора(bcc3, bcc5, gcc, intel) такой код сгенерили... поэтому и подумал... лан, понял в принципе)