const记录参数的[Ref]属性是否有用?

10 delphi delphi-10.1-berlin

使用最新的Delphi版本(柏林/ 10.1/24),[Ref]属性真的有必要吗?

我问这个是因为在线文档说:

常量参数可以通过值或引用传递给函数,具体取决于所使用的特定编译器.要强制编译器通过引用传递常量参数,可以将[Ref]装饰器与const关键字一起使用.

Dav*_*nan 8

它几乎与文档中描述的一样.你会使用[ref],如果你有一个理由要强制按引用传递参数.我能想到的一个例子是互操作.想象一下,您正在调用一个定义如下的API函数:

typedef struct {
    int foo;
} INFO;

int DoStuff(const INFO *lpInfo);
Run Code Online (Sandbox Code Playgroud)

在Pascal中,您可能希望像这样导入它:

type
  TInfo = record
    foo: Integer;
  end;

function DoStuff(const Info: TInfo): Integer; cdecl; external libname;
Run Code Online (Sandbox Code Playgroud)

但由于TInfo规模较小,编译器可能会选择按值传递结构.因此,您可以使用[ref]强制编译器将参数作为引用进行注释.

function DoStuff(const [ref] Info: TInfo): Integer; cdecl; external libname;
Run Code Online (Sandbox Code Playgroud)

  • @rudy 这告诉调用者可以修改该值。一个坏主意。 (3认同)