我怀疑答案是否定的,但是有没有相当于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
我知道Delphi中的Inc(和Dec)运算符,但是你不能将它传递给函数,如:
test: Integer;
//...
SomeFunc(Inc(test)); // compiler error, incompatible types
除了编译错误之外,似乎没有不同的前缀和后缀增量。写这样的代码不是一个大问题:
SomeFunc(test);
test := (test + 1);
SomeFunc(test);
但是C ++中的++(和 - )运算符是一个很棒的功能。
答案 0 :(得分:10)
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;
您可能希望内联任何此类功能。虽然可以讨论这些功能的有用性,但仍有待商榷。
就我个人而言,我觉得这些操作符在C和C ++中有时很方便,但对它们来说并非如此。当然,对于初学者来说,他们提出了一个巨大的陷阱,这里可以看到问题源于++i++ + i++
的问题。
FWIW,您对运营商的描述不准确。你说:
int test = 1;
SomeFunc(test++); // test is 1 inside SomeFunc and 2 afterwards
这是不正确的。变量test
在调用SomeFunc
之前递增,因为函数调用是序列点。因此,如果从test
内部观察,则2
的值为SomeFunc
。但传递给SomeFunc
的值为1
。这个计划:
#include <iostream>
int test = 1;
void foo(int x)
{
std::cout << x << std::endl;
std::cout << test << std::endl;
}
int main()
{
foo(test++);
}
输出
1 2
答案 1 :(得分:0)
如果您只想将增加的值传递给函数,可以使用Succ
,即SomeFunc(Succ(Test));
,但之后不会增加Test。