delphi - Delphi中的一元++运算符

标签 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

我知道 Delphi 中的 Inc(和 Dec)运算符,但您不能将其传递给函数,如下所示:

test: Integer;
//...
SomeFunc(Inc(test));   // compiler error, incompatible types

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

SomeFunc(test);
test := (test + 1);
SomeFunc(test);

但是 C++ 中的++(和 --)运算符是一个很棒的功能。

最佳答案

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 之前递增,因为函数调用是一个序列点。因此,如果从 SomeFunc 内部观察,test 的值为 2。但传递给 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

关于delphi - Delphi中的一元++运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29031513/

相关文章:

delphi - InternetErrorDlg 不保存密码

delphi - Topenddialog 不显示文件扩展名

delphi - 如何查找闪存设备的唯一序列号?

delphi - 在分层数据集中获取子记录的递归过程

delphi - 为什么在为工具按钮分配操作后无法使用它们?

delphi - 方法的默认通用比较器返回不正确的结果

c# - 是否有与 Delphi 的 TDBNavigator 等效的 Winforms .Net?

delphi - Delphi中使用Frames进行GUI信息隐藏

delphi - 如何使用Delphi RTTI获取和设置记录值

delphi - 我如何让 Delphi 知道我已经处理了异常?