![]() |
|
||||||||||
|
|
|
|||||
|
Просто интересно:
Помню, что в старых языках это имело разницу, когда например в цикле for пишешь i++ то используется на одну переменную больше, потому что значение переменной буферизуется в операторе. Лично я уже давно по привычке, если не использую старое значение - то пишу ++i Кто знает, во флеш это вообще имеет смысл? или умный компилятор сам переводит в i = i + 1 ?
__________________
adobe AS3 manual |
|
|||||
|
Lorem ipsum
|
++i и i++ работают по-разному и не являются взаимозаменяемыми в общем случае.
__________________
Поймай яблоко 2! |
|
|||||
|
это вы сейчас про флеш сказали? или о чем?
Точно слышал что есть такая оптимизация в других языках, если при - предыущее значение i нигде не используется, то компилятор меняет выражение на мой вопрос - во флеш компилятор так умеет?
__________________
adobe AS3 manual |
|
|||||
|
Извиняюсь, запутался и выше сам привел пример не тот который хотел
![]() Вот максимально понятная ситуация о которой я спрашиваю
__________________
adobe AS3 manual Последний раз редактировалось strangedk; 20.12.2012 в 15:46. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Исходный код
var i:int = 6 function increment0() { i = i + 1; } function increment1() { i++; } function increment2() { ++i; } function increment3() { var a:int; a = i++; } function increment4() { var b:int; b = ++i; } public function increment0() { _as3_getlocal <0> _as3_pushscope _as3_findproperty i _as3_getlex i _as3_pushbyte 1 _as3_add _as3_initproperty i _as3_returnvoid } public function increment1() { _as3_getlocal <0> _as3_pushscope _as3_findpropstrict i _as3_dup _as3_setlocal <1> _as3_getproperty i _as3_increment_i _as3_setlocal <2> _as3_getlocal <1> _as3_getlocal <2> _as3_setproperty i _as3_kill <2> _as3_kill <1> _as3_returnvoid } public function increment2() { _as3_getlocal <0> _as3_pushscope _as3_findpropstrict i _as3_dup _as3_setlocal <1> _as3_getproperty i _as3_increment_i _as3_setlocal <2> _as3_getlocal <1> _as3_getlocal <2> _as3_setproperty i _as3_kill <2> _as3_kill <1> _as3_returnvoid } Теперь посмотрим как они выглядят при присвоении public function increment3() {
_as3_getlocal <0>
_as3_pushscope
_as3_pushbyte 0
_as3_setlocal <1>
_as3_findpropstrict i
_as3_dup
_as3_setlocal <2>
_as3_getproperty i
_as3_dup
_as3_increment_i
_as3_setlocal <3>
_as3_getlocal <2>
_as3_getlocal <3>
_as3_setproperty i
_as3_kill <3>
_as3_kill <2>
_as3_convert_i
_as3_setlocal <1>
_as3_returnvoid
}
public function increment4() {
_as3_getlocal <0>
_as3_pushscope
_as3_pushbyte 0
_as3_setlocal <1>
_as3_findpropstrict i
_as3_dup
_as3_setlocal <2>
_as3_getproperty i
_as3_increment_i
_as3_dup
_as3_setlocal <3>
_as3_getlocal <2>
_as3_getlocal <3>
_as3_setproperty i
_as3_kill <3>
_as3_kill <2>
_as3_convert_i
_as3_setlocal <1>
_as3_returnvoid
}
|
|
|||||
|
Спасибо, iNils. теперь понятно
__________________
adobe AS3 manual |
|
|||||
|
Код 1
package { import flash.display.Sprite; public class Main extends Sprite { public function Main():void { for (var i:int = 0; i < 100000000; i++); } } } package { import flash.display.Sprite; public class Main extends Sprite { public function Main():void { for (var i:int = 0; i < 100000000; ++i); } } } public function Main() : void { _as3_getlocal <0> _as3_pushscope _as3_getlocal <0> _as3_constructsuper (param count:0) _as3_pushbyte 0 _as3_setlocal <1> _as3_jump offset: 3[#10] #8 _as3_label _as3_inclocal_i <1> #10 _as3_getlocal <1> _as3_pushint 100000000 _as3_iflt offset: -10[#8] _as3_returnvoid }// end function |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 60
|
++i сначала увеличивает значение, а потом его возвращает, i++, наоборот, сначала возвращает, а потом увеличивает, вот и вся разница. Обычно, рекомендуют не использовать этот оператор таким образом, чтобы приходилось задумываться об этом различии.
|
|
|||||
|
Цитата:
Ребята привели байткод, в котором явный ответ на поставленный вопрос.
__________________
adobe AS3 manual |
![]() |
![]() |
Часовой пояс GMT +4, время: 22:43. |
|
|
« Предыдущая тема | Следующая тема » |
|
|