Между двуия sequence point значение скалярного объекта не может меняться более одного раза. Иначе - unspecified behavior.Balancer:Гм. Если i = ++i определено, то почему не определено i = (++i) + 1?
В Java и C# сейчас используются JIT-компиляторы, которые переводят соответствующий байт-код в машинный код процессора перед исполнением программы.Balancer:А скорость C# или даже Java сегодня практически на одном уровне с C++ даже на чисто вычислительных задачах, там, где проигрыш максимален
trainer, 06.07.2004 10:39:31 :Между двуия sequence point значение скалярного объекта не может меняться более одного раза. Иначе - unspecified behavior.
Это не кошмар - это небольшая головоломка.Balancer:Кошмар какой! Говорю же - устарел язык
JIT-компиляторы тоже неглупые люди пишут.Balancer:Для него интересно, что язык более высокого уровня, с привычным синтаксисом и идеологией, со сборкой мусора и т.п. практически не даёт проигрыша в скорости.
trainer, 06.07.2004 11:03:21 :Иначе жизнь станет неинтересной.
Филич, 06.07.2004 10:55:42 :code text
Integer a = 5; 00412C02 call Integer::operator++ (411500h) 00412C07 push eax 00412C08 lea ecx,[ebp-0D4h] 00412C0E push ecx 00412C0F lea edx,[ebp-0ECh] 00412C15 push edx 00412C16 lea ecx,[a] 00412C19 call Integer::operator++ (411500h)
Филич, 06.07.2004 12:34:14 :я тут прикинул. в принципе все верно, что a = a++ + a++; дает 12. "++" это постфиксный оператор, выполняться он будет после sequence point
Balancer, 06.07.2004 12:43:38 :Но тогда i = i++
Да, в этом смысле верно. Но тогда i = i++ не должно менять значение i, не так ли?
Если напишешь i=i-1 вместо i--; у тебя же в теле цикла не будет использоваться значение i на единицу меньшее
Филич, 06.07.2004 12:50:17 :почему? сначала же выполняется присваивание, а уж потом инкремент.
Филич, 06.07.2004 12:57:21 :а с чего ты решил, что постфиксная операция должна выполняться до конца выражения? имхо все верно
Эффект в обоих случаях состоит в увеличении N. Но выражение
++N увеличивает переменную N до использования ее значения, в
то время как N++ увеличивает переменную N после того, как ее
значение было использовано.
в то время как N++ увеличивает переменную N после того, как ее
значение было использовано.
Филич, 06.07.2004 13:14:42 :сначала используем (присваиваем) а потом увеличиваем.
Филич, 06.07.2004 13:23:09 :неа, "потом" это однозначно после sequence point
Здравствуйте, гость!
Гостевой функционал сайта ограничен. Для полноценной работы зарегистрируйтесь, пожалуйста.