使用最新的Delphi版本(柏林/ 10.1 / 24),[Ref]属性真的有必要吗?
我问这个是因为online doc说:
常量参数可以通过值或通过传递给函数 引用,取决于使用的特定编译器。迫使 编译器通过引用传递一个常量参数,可以使用 [ref] decorator与const关键字。
答案 0 :(得分:8)
它几乎与文档中描述的一样。如果您有理由强制通过引用传递参数,则可以使用[ref]
。我能想到的一个例子是互操作。想象一下,您正在调用一个定义如下的API函数:
typedef struct {
int foo;
} INFO;
int DoStuff(const INFO *lpInfo);
在Pascal中你可能希望像这样导入它:
type
TInfo = record
foo: Integer;
end;
function DoStuff(const Info: TInfo): Integer; cdecl; external libname;
但由于TInfo
很小,编译器可能会选择按值传递结构。因此,您可以使用[ref]
进行批注,以强制编译器将参数作为参考传递。
function DoStuff(const [ref] Info: TInfo): Integer; cdecl; external libname;
答案 1 :(得分:0)
另一个示例是SysUtils.pas中Delphi 10.4中新的FreeAndNil过程声明,该声明现在最终确保FreeAndNil仅可使用TObject后代。在以前的Delphi版本中,即使没有任何意义,您也可以将任何内容传递给此函数。