2009-11-01 4 views
3

Очень простой вопрос, но я не мог найти ответ на GoogleЕсть ли у delphi некоторые «быстрые» операторы? (+ =, - =, ...)

В Дельфах, есть способ, чтобы сократить этот вид кода:

MyVar := MyVar + X; 

Как и в C++, я бы сделал MyVar + = X ;. Учитывая то, насколько тривиальным и полезно это должно быть так, но я не могу найти любой вариант для этого никуда ...

Спасибо за любую помощь

ответ

19

Вы ищете "быстрый" или короткие операторов? Inc и декабря, как это было предложено, ближе всего по функциям и длине + = и - =, но они также быстрее при некоторых обстоятельствах. Если у вас есть диапазон проверки включен, тогда они быстрее, чем звонки x: = x + 1;

Вот разборка с проверкой диапазона включена, где все переменными являются байтами (максимальное значение $ FF) для Inc (MyVar, х)

// Inc(MyVar, x); 
    add bl, x 

И здесь для x: = x + 1;

// x := x + 1; 
    movzx eax,bl 
    movzx edx, x 
    add eax,edx 
    cmp eax,$000000ff 
    jbe success 
    call @BoundErr 
success: 
    mov ebx,eax 

Вы можете увидеть разницу, даже если нет ошибки проверки диапазона.

Однако если вы включите Проверка переполнения, Inc по-прежнему зависит от этих накладных расходов.

6

Вы можете использовать команду Inc как это:

Inc(MyVar, X); 
2
Inc(MyVar, X); 

не будет короче, боюсь.

+6

Удаление ненужного пространства позволило бы уменьшить его. –

+4

Это пространство может не понадобиться для синтаксиса языка, но я считаю его необходимым для удобочитаемости :-) – Joey

1

«Do и назначьте» операторы, такие как += и -= не являются частью Delphi спецификации языка - вам нужно сделать ваше приращение другой, вероятно, больше, путем.

+2

Ничто не является частью спецификации Delphi. Нет такого понятия. –

+0

@ Роб Кеннеди - заметен и исправлен. –

5

Нет, вы этого не сделаете. Но вы можете использовать

procedure Inc(var X [ ; N: longint ]); 
Inc(avar) 
Inc(avar, 10) 

прирастить переменную N, или

procedure Dec(var X [ ; N: longint ]); 
Dec(avar); 
Dec(avar, 10); 

к decremente переменной на N.

1

В Дельфах, есть способ, чтобы сократить этот вид кода:

Что вы пытаетесь сократить? x = x + 1 и x + = 1 генерируют идентичный код на языках, которые их поддерживают (для стандартных типов).Так как Delphi не имеет перегрузки оператора, x: = x + 1 является целым или поплавковым оператором. Синтаксис кода таков: синтаксис. Один не «быстрее», чем другой.

+0

Когда выражение 'x' является выражением (возможно, с побочными эффектами, но даже дорогостоящим свойством), существует определенная разница между' x = x + 1' и 'x + = 1' на языках, которые его поддерживают. –

+0

Прочитайте, что я сказал: Для стандартных типов. Несмотря на это, Delphi не является одним из этих языков. – jmucchiello

+2

Павел, очень мало различий, даже на языках, которые его поддерживают. Чтение и запись в свойство включает в себя полностью отдельные функции, и оба должны выполняться ровно один раз в любом синтаксисе. Разница возникает, когда у вас есть составное выражение типа 'e.x: = e.x + 1', где выражение' e' дорого оценивается. В случае * этого * стенография имеет значение. –

Смежные вопросы