операторы, эквивалентные в Delphi - PullRequest
2 голосов
/ 05 декабря 2011

Я бы хотел знать Delphi эквивалент следующих операторов.

++i/--i
i++/i--
i+=1/i-=1

Мне известно только Inc(i) для i++ и Dec(i) для i--.

Также с учетом того, что Inc(i,1) для i+=1 и Dec(i,1) для i-=1.

Но понятия не имею о --i и ++i. Это поддерживается?

Верны ли мои предположения? Если не предложите необходимое.

Спасибо заранее.

Ответы [ 3 ]

11 голосов
/ 05 декабря 2011

Delphi не имеет эквивалентов ни одному из этих операторов.

Это тот случай, когда inc и dec похожи на + = и -=, но отличаются тем, что версии C / C ++ оцениваются как значения.

В то время как в C и C ++ вы можете написать

x = a[i++];

это просто невозможно с inc в Delphi. Так что в Delphi я бы написал это как

x = a[i];
inc(i);

засвидетельствовав, казалось бы, бесконечную поставку вопросов о значении i++ + ++i + ++i++ Я, например, рад, что этих операторов не существует в Delphi.

На более серьезной ноте, вам следует быть очень осторожным при попытке воспроизвести такие операторы, используя, например, встроенные функции. Как только вы начнете объединять такие операторы в сложные выражения, вы увидите непредсказуемое поведение из-за того, что порядок вычисления функций в выражениях в Delphi не определен.

4 голосов
/ 05 декабря 2011

Вы можете использовать что-то вроде этого:

FUNCTION PreInc(VAR I : INTEGER) : INTEGER; INLINE; // ++I
  BEGIN
    INC(I);
    Result:=I
  END;

и

FUNCTION PostInc(VAR I : INTEGER) : INTEGER; INLINE; // I++
  BEGIN
    Result:=I;
    INC(I)
  END;

и с различными перегрузками вы можете реализовать различные варианты этих операторов C.

0 голосов
/ 05 декабря 2011

Идиоматический стиль delphi состоит в том, чтобы разделить вещи C ++ на отдельные операторы.

Если подвыражение с наивысшим внутренним прецедентом было предварительным декрементом, то эквивалентно сделать эту первую команду в блоке команд в delphi.

  Line 1.         --i   --> Dec(i);  
  Line 2.      func(i)  --> func(i);
  Line 3.        x-=1;   --> Dec(x);

Выразительность C не может и не должна быть воспроизведена в другом месте. Не переносите свои идиомы C ++ на другие языки и не пытайтесь использовать их на любом другом языке. Это похоже на говорение по-английски и настаивание на использовании фонетических правил, которые принадлежат кантонскому диалекту. Никто вас не поймет, и вы будете работать в темноте.

...