首页 文章

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

提问于
浏览
9

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

我问这个是因为online doc说:

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

1 回答

  • 7

    如果您有理由强制通过引用传递参数,则's pretty much as described by the documentation. You' d使用 [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;
    

相关问题