Delphi中的一元++运算符

Ala*_*inD 10 delphi

我怀疑答案是否定的,但是有没有相当于C++一元前缀和后缀增量运算符"++".例如.

int test = 1;
SomeFunc(test++);    // test is 1 inside SomeFunc and 2 afterwards
test = 1;
Somefunc(++test);    // test is 2 inside SomeFunc and 2 afterwards
Run Code Online (Sandbox Code Playgroud)

我知道Delphi中的Inc(和Dec)运算符,但是你不能将它传递给函数,如:

test: Integer;
//...
SomeFunc(Inc(test));   // compiler error, incompatible types
Run Code Online (Sandbox Code Playgroud)

除了编译错误之外,似乎没有不同的前缀和后缀增量.写这样的代码不是一个大问题:

SomeFunc(test);
test := (test + 1);
SomeFunc(test);
Run Code Online (Sandbox Code Playgroud)

但是C++中的++(和 - )运算符是一个很棒的特性.

Dav*_*nan 11

Delphi没有内置的等效功能.

您可能会考虑编写这样的函数:

function PostInc(var Value: Integer): Integer;
begin
  Result := Value;
  inc(Value);
end;

function PreInc(var Value: Integer): Integer;
begin
  inc(Value);
  Result := Value;
end;
Run Code Online (Sandbox Code Playgroud)

你可能希望内联任何这样的函数.虽然可以讨论这些功能的有用性,但仍有待商榷.


就个人而言,我觉得这些操作符有时在C和C++中很方便,但对它们来说并非如此.当然对于初学者来说,他们提出了一个巨大的陷阱,正如在这里询问类似表达的问题源源不断所见++i++ + i++.

FWIW,您对运营商的描述是不精确的.你说:

int test = 1;
SomeFunc(test++);    // test is 1 inside SomeFunc and 2 afterwards
Run Code Online (Sandbox Code Playgroud)

这是不正确的.testSomeFunc调用之前,变量会递增,因为函数调用是一个序列点.因此,如果从内部观察,则test具有价值.但传递给的价值是.这个程序:2SomeFuncSomeFunc1

#include <iostream>

int test = 1;

void foo(int x)
{
    std::cout << x << std::endl;
    std::cout << test << std::endl;
}

int main()
{
    foo(test++);
}
Run Code Online (Sandbox Code Playgroud)

输出

1
2

  • @AlainD 78秒实际上是永恒的...我认为David与NeuroSky MindWave直接连接到SO;) (5认同)