[ref] 在 VCL 应用程序中做什么?

What does [ref] do in a VCL application?

我正在使用 Delphi 10 Seattle 开发 VCL 应用程序,并通过 IDE 创建了一个 TDBGrid 事件处理程序,当时我注意到 Delphi 添加了一个 Ref Rect 参数的自定义属性:

procedure TfrmXxx.yyyDrawColumnCell(Sender: TObject;
  const [Ref] Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  //
end;

更新

对于无法重现该行为的用户,这是一个视频:

文档中提到:

Constant parameters may be passed to the function by value or by reference, depending on the specific compiler used. To force the compiler to pass a constant parameter by reference, you can use the [Ref] decorator with the const keyword.

Constant Parameters

When or why does the IDE decide to insert this?

IDE 从不插入这个。它只是复制事件处理程序的声明。编写事件处理程序的人将 pass by[ref]erence 标记放在那里。

Does it have any effect in a VCL app?

是的。
如果将 8 字节参数标记为 const,它通常会在 x64 中按值传递,在 x86 中按引用传递。
将其声明为 const [ref] 将强制在这两种情况下通过引用传递它。
这在进行内联汇编和多线程代码时非常有用。
在引入 const [ref] 之前,我们被迫使用 var 而不是 const 来达到相同的效果。