Delphi支持哪些运算符重载?

16
我想知道哪些重载运算符是可行的(以及适用于哪个版本的Delphi)?
感谢Hallvard关于运算符重载的优秀文章,我知道以下内容:
  • Add(Left, Right: Type): Type(用于'+'运算符)
  • Subtract(Left, Right: Type): Type(用于'-'运算符)
  • Multiply(Left, Right: Type): Type(用于'*'运算符)
  • Divide(Left, Right: Type): Type(用于'/'运算符)
  • Implicit(aValue: Type): AnotherType 和
  • Implicit(aValue: AnotherType): Type(用于隐式赋值:a:=b)
  • Explicit(aValue: Type): AnotherType 和
  • Explicit(aValue: AnotherType): Type(用于显式'typecast'赋值:a:=Type(b))
然而,我不知道'=','<=','<','<>','>'和'>='运算符的名称。这些是否存在,并且从哪个Delphi版本可以使用这些符号?
PS:目前我仍在使用Delphi 2009,如果2010提供这些功能,则我会有另一个强有力的升级理由;-)
2个回答

17

实际上,我已经自己找到了答案,但是我保留了这个问题,因为我可以想象人们经常在stackoverflow上搜索这些信息;

关于运算符重载的官方描述可以在这里找到:http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_(Delphi)

主要的,我查找的名称如下:

  • Equal,用于 '=' 比较:Equal(a: type; b: type) : Boolean;
  • NotEqual,用于 '<>' 比较:NotEqual(a: type; b: type): Boolean;
  • GreaterThan,用于 '>' 比较:GreaterThan(a: type; b: type) Boolean;
  • GreaterThanOrEqual,用于 '>=' 比较:GreaterThanOrEqual(a: type; b: type): resultType;
  • LessThan,用于 '<' 比较:LessThan(a: type; b: type): resultType;
  • LessThanOrEqual,用于 '<=' 比较:LessThanOrEqual(a: type; b: type): resultType;

页面已经移动到这里 - pritaeas

10

我刚刚将我在几个会议上关于可空类型与操作符重载的演讲笔记发布到网上

现在它包含了一个操作符表格,其中列出了名称以及哪些可以/不可以使用。WordPress最初错误地格式化了这个表格,但我已经修复了它。

你也可以下载幻灯片和源代码演示的完整集合

简而言之:

  • 文档(即使是DocWiki)不完整,也不可靠
  • 不能重载位非运算符,因为编译器不支持BitwiseNot。必须改为重载逻辑非运算符。
  • 适用的话要成对重载运算符
  • 注意现有的运算符
  • 在实现隐式运算符时要非常小心

希望这能帮助你。如果你需要更多信息,请告诉我:我已经在操作符重载方面做了相当多的生产工作。

--jeroen


谢谢 - 既然你提到了,我之前见过你的幻灯片。总的来说是个很好的概述。 很遗憾,Delphi社区必须自己记录这些内容;本来我还期望CodeGear / Embarcadero能提供更全面的文档。 - PatrickvL
我需要找时间先把我的很多东西放到网上,然后更新正确的维基百科。 - Jeroen Wiert Pluimers
按位非是 AnInteger XOR -1 - Johan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接